changeset 2008:55d9bbf1fe45 zoom

Merge from default branch
author Chris Cannam
date Mon, 17 Sep 2018 14:05:41 +0100
parents 246bdf94ef7b (current diff) c67285907319 (diff)
children 0ec19725b20b
files .hgsub .hgsubstate README deploy/src/archive-tip.sh deploy/src/archive.sh deploy/win32/build.cmd main/main.cpp repoint-lock.json repoint-project.json
diffstat 89 files changed, 17178 insertions(+), 8895 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.appveyor.yml	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,18 @@
+
+image:
+  - Visual Studio 2017
+
+configuration:
+  - Release
+
+install:
+  - cinst --allow-empty-checksums smlnj
+  - ps: '"[hostfingerprints]" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
+  - ps: '"code.soundsoftware.ac.uk = 66:ef:e2:0e:e3:55:93:9a:33:aa:2a:e9:fe:be:21:c2:a2:8d:4f:f1" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
+  - ps: '"[hostsecurity]" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
+  - ps: '"code.soundsoftware.ac.uk = code.soundsoftware.ac.uk:fingerprints=sha256:64:75:f6:47:15:de:b4:51:ea:96:e2:f4:8a:f5:53:a5:11:c8:dd:82:73:5d:bd:54:18:cb:c8:9d:10:37:28:85" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
+
+build_script:
+  - deploy\win64\build-and-package.bat
+
+  
--- a/.hgignore	Mon Sep 17 13:53:25 2018 +0100
+++ b/.hgignore	Mon Sep 17 14:05:41 2018 +0100
@@ -26,3 +26,34 @@
 .DS_Store
 *.stash
 cov-int/*
+*.deb
+test-svcore-base
+test-svcore-data-fileio
+test-svcore-data-model
+vamp-plugin-sdk
+svcore
+svgui
+svapp
+checker
+piper
+piper-cpp
+dataquay
+bqvec
+bqfft
+bqresample
+bqaudioio
+sv-dependency-builds
+icons/scalable
+vamp-plugin-load-checker
+piper-vamp-simple-server
+piper-convert
+*.msi
+*.user
+glob:.vext*
+glob:.repoint*
+build_win32
+build_win64
+*.AppImage
+*.AppDir
+Dockerfile*.gen
+squashfs-root
--- a/.hgsub	Mon Sep 17 13:53:25 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-vamp-plugin-sdk = https://code.soundsoftware.ac.uk/hg/vamp-plugin-sdk
-svcore = https://code.soundsoftware.ac.uk/hg/svcore
-svgui = https://code.soundsoftware.ac.uk/hg/svgui
-svapp = https://code.soundsoftware.ac.uk/hg/svapp
-dataquay = https://bitbucket.org/breakfastquay/dataquay
-bqvec = https://bitbucket.org/breakfastquay/bqvec
-bqfft = https://bitbucket.org/breakfastquay/bqfft
-bqresample = https://bitbucket.org/breakfastquay/bqresample
-bqaudioio = https://bitbucket.org/breakfastquay/bqaudioio
-sv-dependency-builds = https://code.soundsoftware.ac.uk/hg/sv-dependency-builds
-icons/scalable = https://code.soundsoftware.ac.uk/hg/sv-iconset
-checker = https://code.soundsoftware.ac.uk/hg/vamp-plugin-load-checker
-piper-cpp = https://code.soundsoftware.ac.uk/hg/piper-cpp
--- a/.hgsubstate	Mon Sep 17 13:53:25 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-e7ef7f547cac52afe4f3496040b9f5e7ca8247f5 bqaudioio
-048fd8ba184040d217f33a9ea3cbdc5676a2876f bqfft
-1735a488ded2bbd0f1a60cd33c4c26b3672e49a2 bqresample
-9fd9745307e54a53cbd09cb67a4f9783d1b02ed2 bqvec
-1eefc20919cd080b684b2bbbc0af7270b8facb54 checker
-3768bdde6fdf866aa63fff5bde8d9fa64a8979ef dataquay
-c37b5598a4beb570417716e30aa649c78312169f icons/scalable
-0000000000000000000000000000000000000000 piper-cpp
-5f67a29f0fc7f1b908f7cde4866173a7af337862 sv-dependency-builds
-2683a8ca36ea55b90917713571b9cef6cc049b5f svapp
-710e6250a4016c6057407814001f6f3ea8d843b5 svcore
-13d9b422f7fef21a013329d081123e7191401824 svgui
-0eebd22a081a824067bf3d5de65326696feab653 vamp-plugin-sdk
--- a/.hgtags	Mon Sep 17 13:53:25 2018 +0100
+++ b/.hgtags	Mon Sep 17 14:05:41 2018 +0100
@@ -50,3 +50,33 @@
 2868d5abf1a3baa37099c1b5d7e984bf8bb8177a sv_v2.4.1
 94253fa113183075c8400fa64d0ccb0e81682f90 sv_v2.5
 e206741df37ddfa3db28bfbbe4b79f2248b92695 sv_v2.5_osx_deploy
+e6c7585863feeba4d278c770314e3455e0020bdb last_v2.5_on_default_branch
+3173259cdcc67cb687fb9d62f6a945a86bc7ea77 sv_v3.0beta1
+7a8e909a15da99ff87928a0be0475f214a450d14 sv_v3.0beta2
+7a8e909a15da99ff87928a0be0475f214a450d14 sv_v3.0beta2
+b6f1052dbda12b33c5bc0ea4ae33d4764da10b31 sv_v3.0beta2
+881d7f99bba33a35852bd0dcfa19367f6b306e14 sv_v3.0beta3
+2f13bdee5cb541f22ac6567ba55faf2aa23277df sv_v3.0beta4
+2f13bdee5cb541f22ac6567ba55faf2aa23277df sv_v3.0beta4
+d739444d2c489f79572017902e9b5b4ec961cbbe sv_v3.0beta4
+811fbe905f5e4f3114a8024c0a8d45f9d4ff838d sv_v3.0rc1
+c3380c78811fbcaf1dae5f4b08d1a0db05bc2820 sv_v3.0
+cbaac283f47ea7f21e83612cf0931b26ea29c213 sv_v3.0.1
+cbaac283f47ea7f21e83612cf0931b26ea29c213 sv_v3.0.1
+96a5cf264033195f52613f6fce02398ae3efa020 sv_v3.0.1
+96a5cf264033195f52613f6fce02398ae3efa020 sv_v3.0.1
+fad5960ac61a2cead83ff1b57072cb0634bf6f4e sv_v3.0.1
+38c40fe5135b8220e39cf2a6ba52f43bd40168b9 sv_v3.0.2
+8d2d9a4f5d5264ed6c738ff7b36f3a9e1729d5aa sv_v3.0.3
+038f024c8390b1aa83b7f60af8319066f7794f79 sv_v3.1pre1
+643768964863741124a66a8d55002d1ff95d8c43 sv_v3.1pre2
+643768964863741124a66a8d55002d1ff95d8c43 sv_v3.1pre2
+1fda47827e0e12cd83c172de8384e8136d9c4ca2 sv_v3.1pre2
+a38a8c4746c27ad5eae055ffa3f141a816f9e7a2 sv_v3.1pre3
+2ea9537868d50ba1a4d4cd54ac3bdeb10b9f4de0 sv_v3.1pre4
+2ea9537868d50ba1a4d4cd54ac3bdeb10b9f4de0 sv_v3.1pre4
+b465eb7018bcc0add14886ac57d4f79f38401b8f sv_v3.1pre4
+f4d7c9522fcff88292ed2b91bc89b30eeaa6794c sv_v3.1
+4ff2193314d406c3a83c86b409414cf60a0b1406 sv_v3.1.1
+4ff2193314d406c3a83c86b409414cf60a0b1406 sv_v3.1.1
+690eaf241ad5f57e4ed59f09c0f4c1ce659b5571 sv_v3.1.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.travis.yml	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,33 @@
+language:
+  - cpp
+
+matrix:
+  include:
+    - os: osx
+      osx_image: xcode9
+    - os: linux
+      dist: trusty
+      sudo: required
+      addons:
+        apt:
+          sources:
+           - ubuntu-toolchain-r-test
+          packages:
+           - libbz2-dev libfftw3-dev libfishsound1-dev libid3tag0-dev liblo-dev liblrdf0-dev libmad0-dev liboggz2-dev libpulse-dev libsamplerate-dev libsndfile-dev libsord-dev libxml2-utils portaudio19-dev qt5-default libqt5svg5-dev raptor-utils librubberband-dev autoconf libtool git mlton
+
+before_install:
+  - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew update ; fi
+  - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew install polyml ; fi
+  - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew install qt5 ; fi
+  - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then export PATH=$PATH:/usr/local/opt/qt5/bin ; fi
+  - ( cd ../ ; git clone https://github.com/sandstorm-io/capnproto )
+  - ( cd ../capnproto/ ; git checkout v0.6.1 )
+  - ( cd ../capnproto/c++ ; autoreconf -i )
+  - ( cd ../capnproto/c++ ; ./configure && make && sudo make install )
+
+before_script:
+  - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ./configure ; else ./repoint install && qmake -r sonic-visualiser.pro ; fi
+
+script:
+  - make -j3
+  - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ./deploy/linux/deploy-appimage.sh ; fi
--- a/CHANGELOG	Mon Sep 17 13:53:25 2018 +0100
+++ b/CHANGELOG	Mon Sep 17 14:05:41 2018 +0100
@@ -1,4 +1,157 @@
-Changes in Sonic Visualiser 2.5 since the previous release 2.4.1:
+
+Changes in Sonic Visualiser 3.2 since the previous release 3.1.1:
+
+ - Add feature to convert and import audio from a CSV data file
+
+
+Changes in Sonic Visualiser 3.1.1 (Aug 2018) since the previous release 3.1:
+
+ - Fix failure to record correctly into an empty session with certain
+   audio drivers
+
+ - Fix failure to run LADSPA plugins at all, except with some unusual
+   path layouts
+
+ - Fix failure to silence sonified notes when rewinding backwards or
+   jumping back from a loop endpoint
+
+ - Fix macOS .dmg image so as to use older HFS+ filesystem for compatibility
+
+
+Changes in Sonic Visualiser 3.1 (July 2018) since the previous release 3.0.3:
+
+ - Add Plugins tab to Preferences dialog, from which you can review
+   the plugin load paths and see which plugins were loaded from which
+   locations, and also customise load paths (though the various path
+   environment variables are still supported)
+
+ - Stream the export of audio data and other CSV data so that
+   very large exports don't hang the UI or run us out of memory
+   (thanks to Lucas Thompson)
+
+ - Ensure vertical scale appears for auto-align layers when there is
+   nothing else to auto-align them to
+
+ - Fix another long-standing Windows-platform wide-char/utf8
+   conversion problem, with environment variable naming and contents
+
+ - Improve handling of incomplete session loads, i.e. situations where
+   the audio files referred to by a session could not be found -
+   previously the session could be re-saved immediately thus losing
+   the audio reference; now at least we disable Save (enabling only
+   Save As) and show a warning
+
+ - Update pane and layer menu shortcuts so that the
+   waveform/spectrogram/etc shortcuts (Shift+G etc) operate on the
+   source model in the currently-selected pane rather than the main
+   model. This is a backward-incompatible change but is a far more
+   intuitive way for the function to work
+
+ - Use dark background for bright colours in time-value/note/etc
+   layers as well as e.g. waveforms - this is how it was always
+   "intended to" work, but it is a backward-incompatible change
+
+ - Make "Select All" select the whole span of everything that exists,
+   not just the main model
+
+ - Add horizontal scale to Spectrum layer
+
+ - Improve spacing and labelling of vertical log scales
+
+ - Update build system for better Cap'n Proto version support and to
+   use Repoint for code management in the repository
+
+ - Various other bug fixes
+
+
+Changes in Sonic Visualiser 3.0.3 (May 2017) since the previous release 3.0.2:
+
+ - Improve decisions about where and how to label vertical scales
+
+ - Update build support material and documentation to reflect the
+   official release of Cap'n Proto 0.6 (which we can now use rather
+   than depending on git builds)
+
+
+Changes in Sonic Visualiser 3.0.2 (Mar 2017) since the previous release 3.0.1:
+
+ - Fix crash when changing parameters for spectrum view
+
+ - Fix incorrect measure tool crosshairs in spectrum view
+
+ - Update Russian and Czech UI translations (thanks to Alexandre Prokoudine
+   and Pavel Fric respectively)
+
+
+Changes in Sonic Visualiser 3.0.1 (Mar 2017) since the previous release 3.0:
+
+ - Fix crashes with MIDI devices and speedup/slowdown control on Windows
+
+ - Update MIDI input driver layer
+
+
+Changes in Sonic Visualiser 3.0 (Mar 2017) since the previous release 2.5:
+
+ - Add ability to record audio, and ability to change the audio device
+   for playback or recording in the preferences
+
+ - Add complete support for high-resolution (Hi-DPI or retina)
+   displays, including for layer data rendering as well as UI controls
+   and icons. This makes the biggest difference when using a retina
+   Mac, on which previous versions did not render layer data at retina
+   resolution, but it also improves scaling and rendering of UI
+   elements on Hi-DPI displays on Windows and Linux
+
+ - Add ability to export scalable (SVG) image files
+
+ - Run plugins in a separate process, so that if a plugin crashes, it
+   no longer brings down Sonic Visualiser with it. In every other
+   respect the behaviour should be unchanged
+
+ - Scan plugins on startup in a separate process, and report on any
+   that crash or won't load
+
+ - Add ability to open, display, and analyse very long audio files (of
+   more than 2^32 sample frames)
+
+ - Change mp3 file loading so as to compensate for encoder/decoder
+   delay and padding (using "gapless playback" logic). While this is a
+   real improvement, unfortunately it does mean that the initial
+   padding in mp3 file load has changed from previous versions, which
+   may mean some sessions saved in previous versions are no longer
+   correctly aligned. It's not a great idea to use mp3 as a file
+   format of record, because of differences like this between
+   decoders. The previous behaviour is still available as a preference.
+
+ - Add new Hybrid normalisation type for spectrogram and colour 3d
+   plot layers. This normalises each column to its peak value and then
+   scales the normalised values by the log of the peak in order to
+   restore some distinction in scale between columns with different
+   levels. It can provide quite visually clear results.
+
+ - Add function to subdivide time instant layers into regular
+   intervals (and its inverse)
+
+ - Add new preference for default colour scales
+
+ - Add a basic ability to zoom (in the frequency axis) to the spectrum
+
+ - Switch to using combined level/pan controls in layer property boxes
+   and for the main volume control
+
+ - Make CSV file reader better able to handle files with varying
+   numbers of columns
+
+ - Fix a number of problems on Windows with loading and saving some
+   file formats to filenames not representable in system codepage
+
+ - Add "What's New" dialog
+
+ - Finally switch the Windows build to 64-bit by default (with
+   adapters to run either 32- or 64-bit plugins)
+
+
+Changes in Sonic Visualiser 2.5 (Oct 2015) since the previous release 2.4.1:
 
  - Add unit-converter dialog, for converting between various pitch and
    timing units
@@ -13,11 +166,13 @@
 
  - Fix failure to export last instant in a time-instant layer
 
-Changes in Sonic Visualiser 2.4.1 since the previous release 2.4:
+
+Changes in Sonic Visualiser 2.4.1 (Oct 2014) since the previous release 2.4:
 
  - Fix a crash when rendering certain colour 3d plot layers
 
-Changes in Sonic Visualiser 2.4 since the previous release 2.3:
+
+Changes in Sonic Visualiser 2.4 (Sep 2014) since the previous release 2.3:
 
  - Add support for left/right scrolling using a two-finger touchpad
    gesture (where available)
@@ -71,7 +226,7 @@
    platforms.
 
 
-Changes in Sonic Visualiser 2.3 since the previous release 2.2:
+Changes in Sonic Visualiser 2.3 (Dec 2013) since the previous release 2.2:
 
  - Add a startup welcome dialog that also explains what SV makes
    network connections for and allows user to forbid them
@@ -97,7 +252,7 @@
    build
 
 
-Changes in Sonic Visualiser 2.2 since the previous release 2.1:
+Changes in Sonic Visualiser 2.2 (July 2013) since the previous release 2.1:
 
  - Build with support for hidpi ("retina") text on OS/X
 
@@ -114,7 +269,7 @@
    a new session is started
 
 
-Changes in Sonic Visualiser 2.1 since the previous release 2.0.1:
+Changes in Sonic Visualiser 2.1 (May 2013) since the previous release 2.0.1:
 
  - Fix incorrect handling of FixedSampleRate outputs (Vamp SDK fix)
 
@@ -132,7 +287,7 @@
  - Fix incorrect samplerate in reading m4a files on OS/X
 
 
-Changes in Sonic Visualiser 2.0 since the previous release 1.9:
+Changes in Sonic Visualiser 2.0 (July 2012) since the previous release 1.9:
 
  - Support 64-bit builds on OS/X (using CoreAudio instead of
    obsolete QuickTime audio file reader)
@@ -144,7 +299,7 @@
  - Add a fullscreen mode on the F11 key
 
 
-Changes in Sonic Visualiser 1.9 since the previous release 1.8:
+Changes in Sonic Visualiser 1.9 (Oct 2011) since the previous release 1.8:
 
  - Add session templates; save session as template; apply template to
    session
@@ -155,7 +310,7 @@
  - Various bug fixes.
 
 
-Changes in Sonic Visualiser 1.8 since the previous release 1.7.2:
+Changes in Sonic Visualiser 1.8 (Apr 2011) since the previous release 1.7.2:
 
  - Sonic Visualiser now registers as a file type handler on OS/X,
  providing better integration with the desktop generally (Dan Stowell)
@@ -185,7 +340,7 @@
  - A Czech translation is now included (thanks to Pavel Fric).
 
 
-Changes in Sonic Visualiser 1.7.2 since the previous release 1.7.1:
+Changes in Sonic Visualiser 1.7.2 (May 2010) since the previous release 1.7.1:
 
  - The time-value layer now has an origin line and an option to
  show derivatives (change from one point to the next) rather than
@@ -198,7 +353,7 @@
  fixed
 
 
-Changes in Sonic Visualiser 1.7.1 since the previous release 1.7:
+Changes in Sonic Visualiser 1.7.1 (Oct 2009) since the previous release 1.7:
 
  - The RDF importer does a better job of assigning labels to layers,
  layers to panes, and values to labelled regions
@@ -215,7 +370,7 @@
  - The Russian translation has been updated (thanks Alexandre)
 
 
-Changes in Sonic Visualiser 1.7 since the previous release 1.6:
+Changes in Sonic Visualiser 1.7 (Sep 2009) since the previous release 1.6:
 
  - A new "Insert Item At Selection" function on the Edit menu
  can be used to create Note and Region layer items whose time
@@ -230,7 +385,7 @@
 
  - Time values throughout the display may optionally be shown in
  seconds and frames at various frame rates
- 
+
  - A crash on exit in Windows has been fixed
 
  - A very unobtrusive user survey is now included
@@ -238,7 +393,7 @@
  - Various other bug fixes.
 
 
-Changes in Sonic Visualiser 1.6 since the previous release 1.5:
+Changes in Sonic Visualiser 1.6 (Jun 2009) since the previous release 1.5:
 
  - The Colour 3D Plot layer now supports logarithmic vertical
  scale and linear interpolation options.
@@ -252,7 +407,7 @@
  - Various other bug fixes.
 
 
-Changes in Sonic Visualiser 1.5 since the previous version 1.4:
+Changes in Sonic Visualiser 1.5 (Mar 2009) since the previous release 1.4:
 
  - You can now insert time instants, time values, and notes using
  a MIDI device during playback.  If a time value or note layer is
@@ -293,7 +448,7 @@
  been fixed.
 
 
-New features in Sonic Visualiser 1.4 since the previous version 1.3:
+Changes in Sonic Visualiser 1.4 (Dec 2008) since the previous release 1.3:
 
  - SV now has a Region layer type, used for display of features with
  durations.  It also supports Vamp v2.0 plugins that provide durations
@@ -323,7 +478,7 @@
  - Several crashes and other bugs have been fixed.
 
 
-Changes in Sonic Visualiser 1.3 since the previous version 1.2:
+Changes in Sonic Visualiser 1.3 (Jul 2008) since the previous release 1.2:
 
  - There is a new spreadsheet-style data viewer and editor for
  viewing and editing the data in some types of annotation layer.
@@ -342,7 +497,7 @@
  - Several other bug fixes.
 
 
-New features in Sonic Visualiser 1.2, since the previous version 1.0:
+Changes in Sonic Visualiser 1.2 (Feb 2008) since the previous release 1.0:
 
  - SV now supports time-alignment of multiple performances of a work
  loaded at the same time.  This option is enabled when the MATCH Vamp
--- a/INSTALL.txt	Mon Sep 17 13:53:25 2018 +0100
+++ b/INSTALL.txt	Mon Sep 17 14:05:41 2018 +0100
@@ -1,45 +1,77 @@
 
-To compile from source
-----------------------
+To compile Sonic Visualiser from source
+=======================================
 
-To build on a Unix-like system, run
+Windows
+-------
 
-$ ./configure && make
+Use the Qt Creator IDE with either the MinGW compiler (for 32-bit
+builds) or Visual C++ (for 64-bit builds).
 
-The following additional libraries are required or optional when
-building the SV core libraries:
+For details, see the wiki page at
 
-REQUIRED	Qt v5			http://qt-project.org/
-REQUIRED	Vamp Plugin SDK	v2.x	http://www.vamp-plugins.org/
-REQUIRED	Rubber Band Library	http://www.breakfastquay.com/rubberband/
-REQUIRED	libsndfile		http://www.mega-nerd.com/libsndfile/
-REQUIRED	libsamplerate		http://www.mega-nerd.com/SRC/
-REQUIRED	FFTW3 			http://www.fftw.org/
-REQUIRED	bzip2 library		http://www.bzip.org/
-REQUIRED	Sord and Serd libraries	http://drobilla.net/software/
+https://code.soundsoftware.ac.uk/projects/sonic-visualiser/wiki/WindowsBuild30
 
-Optional	MAD mp3 decoder		http://www.underbit.com/products/mad/
-Optional	Oggz and fishsound	http://xiph.org/oggz/
-Optional        liblo OSC library	http://www.plugin.org.uk/liblo/
 
-If you are going to build the rest of the SV libraries and the Sonic
-Visualiser application, you will also need one or more of:
+MacOS
+-----
 
-Optional	JACK			http://www.jackaudio.org/
-Optional	PortAudio v19		http://www.portaudio.com/
-Optional	PulseAudio    	 	http://www.pulseaudio.org/
+Build from the command line, but don't use the configure script.
+Instead install Qt v5.x and run
+
+$ ./repoint install
+$ qmake -r  # you may need to use the full path to your Qt qmake here
+$ make
+
+
+Linux
+-----
+
+$ ./configure && make && make install
+
+The following additional libraries are required or optional:
+
+REQUIRED        Qt v5                   http://qt-project.org/
+REQUIRED        Vamp Plugin SDK v2.x    http://www.vamp-plugins.org/
+REQUIRED        Rubber Band Library     http://www.breakfastquay.com/rubberband/
+REQUIRED        libsndfile              http://www.mega-nerd.com/libsndfile/
+REQUIRED        libsamplerate           http://www.mega-nerd.com/SRC/
+REQUIRED        FFTW3                   http://www.fftw.org/
+REQUIRED        bzip2 library           http://www.bzip.org/
+REQUIRED        Sord and Serd libraries http://drobilla.net/software/
+REQUIRED        Cap'n Proto             http://capnproto.org/
+
+Optional        MAD mp3 decoder         http://www.underbit.com/products/mad/
+Optional        Oggz and fishsound      http://xiph.org/oggz/
+Optional        liblo OSC library       http://www.plugin.org.uk/liblo/
+Optional        JACK                    http://www.jackaudio.org/
+Optional        PortAudio v19           http://www.portaudio.com/
+Optional        PulseAudio              http://www.pulseaudio.org/
 
 Although JACK, PortAudio, and PulseAudio are individually optional,
-you will need to have one or the other of them in order to get any
-audio playback.  Usually JACK is preferred on Linux, with PulseAudio
-as a backup, and PortAudio is used elsewhere.
+you will need to have at least one of them in order to get any audio
+playback.  Usually JACK is preferred on Linux, with PulseAudio as a
+backup, and PortAudio is used elsewhere.
 
 On Linux, you will need the ALSA libraries (used for MIDI).
 
-If you happen to be using a Debian-based Linux, you probably want to
-apt-get install something like the following packages: qtbase5-dev
-qt5-default libsndfile1-dev libsamplerate0-dev libfftw3-dev libbz2-dev
-libjack-dev libjack0 libpulse-dev libmad0-dev libid3tag0-dev
-liboggz2-dev libfishsound1-dev libasound2-dev liblo-dev liblrdf0-dev
-libsord-dev libserd-dev vamp-plugin-sdk librubberband-dev.
+For Cap'n Proto, currently you will need the v0.6 release which (if
+not available as a package) can be obtained from the releases page on
+Github. To build it, you might do something like
 
+$ curl -L -o capnproto-v0.6.0.tar.gz https://github.com/sandstorm-io/capnproto/archive/v0.6.0.tar.gz
+$ tar xf capnproto-v0.6.0.tar.gz
+$ cd capnproto-0.6.0/c++
+$ autoreconf -i 
+$ ./configure --enable-static --disable-shared
+$ make && make install
+
+For the rest, if you happen to be using a Debian-based Linux, you
+probably want to apt install something like the following packages:
+
+build-essential libbz2-dev libfftw3-dev libfishsound1-dev
+libid3tag0-dev liblo-dev liblrdf0-dev libmad0-dev liboggz2-dev
+libpulse-dev libsamplerate-dev libsndfile-dev libsord-dev
+libxml2-utils portaudio19-dev qt5-default libqt5svg5-dev raptor-utils
+librubberband-dev git mercurial autoconf automake libtool
+
--- a/README	Mon Sep 17 13:53:25 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-
-Sonic Visualiser
-================
-
-Sonic Visualiser is a program for viewing and analysing the contents
-of music audio files.
-
-With Sonic Visualiser you can:
-
- * Load audio files in various formats (WAV/AIFF, plus Ogg and mp3
-if compiled in) and view their waveforms
- 
- * Look at audio visualisations such as spectrogram views, with
-interactive adjustment of display parameters
-
- * Annotate audio data by adding labelled time points and defining
-segments, point values and curves
-
- * Run feature-extraction plugins to calculate annotations
-automatically, using algorithms such as beat trackers, pitch
-detectors and so on (see http://vamp-plugins.org/)
-
- * Import annotation data from various text formats and MIDI files
-
- * Play back the original audio with synthesised annotations, taking
-care to synchronise playback with the display position
-
- * Slow down and speed up playback and loop segments of interest,
-including seamless looping of complex non-contiguous areas
-
- * Export annotations and audio selections to external files.
-
-Sonic Visualiser can also be controlled remotely using the Open Sound
-Control (OSC) protocol (if support is compiled in).
-
-
-Credits
--------
-
-Sonic Visualiser was developed at the Centre for Digital Music,
-Queen Mary, University of London.
-
-  http://c4dm.eecs.qmul.ac.uk/
-
-Sonic Visualiser was written by Chris Cannam with contributions from
-Christian Landone, Mathieu Barthet, Dan Stowell, Jesus Corral Garcia,
-Matthias Mauch, and Craig Sapp.
-
-Code copyright 2005-2007 Chris Cannam and copyright 2006-2016 Queen
-Mary, University of London, except where indicated in the individual
-source files.
-
-This work was partially funded by the European Commission through the
-SIMAC project IST-FP6-507142 and the EASAIER project IST-FP6-033902.
-
-This work was partially funded by the Arts and Humanities Research
-Council through its Research Centre for the History and Analysis of
-Recorded Music (CHARM).
-
-This work was partially funded by the Engineering and Physical
-Sciences Research Council through the OMRAS2 project EP/E017614/1, the
-Musicology for the Masses project EP/I001832/1, and the Sound Software
-project EP/H043101/1.
-
-Sonic Visualiser 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.  See the file COPYING included with
-this distribution for more information.
-
-Sonic Visualiser may also make use of the following libraries:
-
- * Qt5 -- Copyright Digia Oyj, distributed under the LGPL
- * JACK -- Copyright Paul Davis, Jack O'Quin et al, under the LGPL
- * PortAudio -- Copyright Ross Bencina, Phil Burk et al, BSD license
- * Ogg decoder -- Copyright CSIRO Australia, BSD license
- * MAD mp3 decoder -- Copyright Underbit Technologies Inc, GPL
- * libsamplerate -- Copyright Erik de Castro Lopo, GPL
- * libsndfile -- Copyright Erik de Castro Lopo, LGPL
- * FFTW3 -- Copyright Matteo Frigo and MIT, GPL
- * Rubber Band -- Copyright Chris Cannam, GPL
- * Vamp plugin SDK -- Copyright Chris Cannam and QMUL, BSD license
- * LADSPA plugin SDK -- Copyright Richard Furse et al, LGPL
- * RtMIDI -- Copyright Gary P. Scavone, BSD license
- * Dataquay -- Copyright Breakfast Quay, BSD license
- * Sord and Serd -- Copyright David Robillard, BSD license
- * Redland -- Copyright Dave Beckett and the University of Bristol, LGPL/Apache license
- * liblo OSC library -- Copyright Steve Harris, GPL
-
-(Some distributions of Sonic Visualiser may have one or more of these
-libraries statically linked.)  Many thanks to their authors.
-
-
-Compiling Sonic Visualiser
---------------------------
-
-If you are planning to compile Sonic Visualiser from source code,
-please read the file INSTALL.txt.
-
-
-More information
-----------------
-
-For more information about Sonic Visualiser, please go to
-
-  http://www.sonicvisualiser.org/
-
--- a/README.OSC	Mon Sep 17 13:53:25 2018 +0100
+++ b/README.OSC	Mon Sep 17 14:05:41 2018 +0100
@@ -167,11 +167,10 @@
 	 gain
            whose values are linear multipliers (i.e. 1.0 == unity gain).
 
-	 speedup
-           takes a value of a percentage increase in playback
-           speed, so 0 is the default playback speed, 100 sets double
-           the default speed, and -100 sets half the default speed 
-           (yes, I know, it's nonsense, sorry).
+	 speed
+           takes a value of a percentage change in playback
+           speed, so 100 is the default playback speed, 200 sets
+           double the default speed, and 50 sets half the default.
 
 	 overlays
            controls the verbosity level of the text overlays on
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,121 @@
+
+Sonic Visualiser
+================
+
+#### A program for viewing and analysing the contents of music audio files
+
+![Sonic Visualiser small screenshot](http://sonicvisualiser.org/images/sv-3.0-win-thumb.png)
+
+* Home page and downloads: http://sonicvisualiser.org/
+* Code project: https://code.soundsoftware.ac.uk/projects/sonic-visualiser
+
+With Sonic Visualiser you can:
+
+ * Load audio files in various formats (WAV/AIFF, plus Ogg and mp3
+if compiled in) and view their waveforms
+ 
+ * Look at audio visualisations such as spectrogram views, with
+interactive adjustment of display parameters
+
+ * Annotate audio data by adding labelled time points and defining
+segments, point values and curves
+
+ * Run feature-extraction plugins to calculate annotations
+automatically, using algorithms such as beat trackers, pitch
+detectors and so on (see http://vamp-plugins.org/)
+
+ * Import annotation data from various text formats and MIDI files
+
+ * Play back the original audio with synthesised annotations, taking
+care to synchronise playback with the display position
+
+ * Slow down and speed up playback and loop segments of interest,
+including seamless looping of complex non-contiguous areas
+
+ * Export annotations and audio selections to external files.
+
+Sonic Visualiser can also be controlled remotely using the Open Sound
+Control (OSC) protocol (if support is compiled in).
+
+
+Credits
+-------
+
+Sonic Visualiser was developed at the Centre for Digital Music,
+Queen Mary, University of London.
+
+  http://c4dm.eecs.qmul.ac.uk/
+
+Sonic Visualiser was written by Chris Cannam with contributions from
+Christian Landone, Mathieu Barthet, Dan Stowell, Jesus Corral Garcia,
+Matthias Mauch, and Craig Sapp.
+
+Code copyright 2005-2007 Chris Cannam and copyright 2006-2018 Queen
+Mary, University of London, except where indicated in the individual
+source files.
+
+Russian translation provided by Alexandre Prokoudine, copyright
+2006-2018 Alexandre Prokoudine.
+
+Czech translation provided by Pavel Fric, copyright 2010-2018 Pavel
+Fric.
+
+This work was partially funded by the European Commission through the
+SIMAC project IST-FP6-507142 and the EASAIER project IST-FP6-033902.
+
+This work was partially funded by the Arts and Humanities Research
+Council through its Research Centre for the History and Analysis of
+Recorded Music (CHARM).
+
+This work was partially funded by the Engineering and Physical
+Sciences Research Council through the OMRAS2 project EP/E017614/1, the
+Musicology for the Masses project EP/I001832/1, and the Sound Software
+project EP/H043101/1.
+
+Sonic Visualiser 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.  See the file COPYING included with
+this distribution for more information.
+
+Sonic Visualiser may also make use of the following libraries:
+
+ * Qt5 -- Copyright The Qt Company, distributed under the LGPL
+ * JACK -- Copyright Paul Davis, Jack O'Quin et al, under the LGPL
+ * PortAudio -- Copyright Ross Bencina, Phil Burk et al, BSD license
+ * Ogg decoder -- Copyright CSIRO Australia, BSD license
+ * MAD mp3 decoder -- Copyright Underbit Technologies Inc, GPL
+ * libsamplerate -- Copyright Erik de Castro Lopo, BSD license
+ * libsndfile -- Copyright Erik de Castro Lopo, LGPL
+ * FFTW3 -- Copyright Matteo Frigo and MIT, GPL
+ * Rubber Band -- Copyright Particular Programs Ltd, GPL
+ * Vamp plugin SDK -- Copyright Chris Cannam and QMUL, BSD license
+ * LADSPA plugin SDK -- Copyright Richard Furse et al, LGPL
+ * RtMIDI -- Copyright Gary P. Scavone, BSD license
+ * Dataquay -- Copyright Particular Programs Ltd, BSD license
+ * Sord and Serd -- Copyright David Robillard, BSD license
+ * Redland -- Copyright Dave Beckett and the University of Bristol, LGPL/Apache license
+ * liblo OSC library -- Copyright Steve Harris, GPL
+ * Cap'n Proto -- Copyright Sandstorm Development Group, Inc, BSD license
+
+(Some distributions of Sonic Visualiser may have one or more of these
+libraries statically linked.)  Many thanks to their authors.
+
+
+Compiling Sonic Visualiser
+--------------------------
+
+If you are planning to compile Sonic Visualiser from source code,
+please read the file INSTALL.txt.
+
+ * Linux and macOS CI build: [![Build Status](https://travis-ci.org/sonic-visualiser/sonic-visualiser.svg?branch=master)](https://travis-ci.org/sonic-visualiser/sonic-visualiser)
+ * Windows CI build: [![Build status](https://ci.appveyor.com/api/projects/status/26pygienkigw39p7?svg=true)](https://ci.appveyor.com/project/cannam/sonic-visualiser)
+
+
+More information
+----------------
+
+For more information about Sonic Visualiser, please go to
+
+  http://www.sonicvisualiser.org/
+
--- a/acinclude.m4	Mon Sep 17 13:53:25 2018 +0100
+++ b/acinclude.m4	Mon Sep 17 14:05:41 2018 +0100
@@ -261,3 +261,54 @@
   fi
 ])
 
+# ===========================================================================
+#  https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the current language's compiler
+#   or gives an error.  (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the current language's default
+#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
+#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
+#   force the compiler to issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.  This file is offered as-is, without any
+#   warranty.
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
--- a/base.pri	Mon Sep 17 13:53:25 2018 +0100
+++ b/base.pri	Mon Sep 17 14:05:41 2018 +0100
@@ -23,7 +23,7 @@
 INCLUDEPATH += $$SV_INCLUDEPATH
 
 # Platform defines for RtMidi
-linux*:   DEFINES += __LINUX_ALSASEQ__
+linux*:   DEFINES += __LINUX_ALSASEQ__ __LINUX_ALSA__
 macx*:    DEFINES += __MACOSX_CORE__
 win*:     DEFINES += __WINDOWS_MM__
 solaris*: DEFINES += __RTMIDI_DUMMY_ONLY__
@@ -31,37 +31,5 @@
 # Defines for Dataquay
 DEFINES += USE_SORD
 
-CONFIG += qt thread warn_on stl rtti exceptions c++11
+CONFIG += qt thread warn_on stl rtti exceptions
 
-include(bq-files.pri)
-include(vamp-plugin-sdk-files.pri)
-include(svcore/files.pri)
-
-DATAQUAY_SOURCES=$$fromfile(dataquay/lib.pro, SOURCES)
-DATAQUAY_HEADERS=$$fromfile(dataquay/lib.pro, HEADERS)
-
-CHECKER_SOURCES=$$fromfile(checker/checker.pri, SOURCES)
-CHECKER_HEADERS=$$fromfile(checker/checker.pri, HEADERS)
-                 
-CLIENT_HEADERS=$$fromfile(piper-cpp/vamp-client/client.pro, HEADERS)
-
-for (file, BQ_SOURCES)       { SOURCES += $$file }
-for (file, BQ_HEADERS)       { HEADERS += $$file }
-
-for (file, VAMP_SOURCES)     { SOURCES += $$file }
-for (file, VAMP_HEADERS)     { HEADERS += $$file }
-
-for (file, DATAQUAY_SOURCES) { SOURCES += $$sprintf("dataquay/%1", $$file) }
-for (file, DATAQUAY_HEADERS) { HEADERS += $$sprintf("dataquay/%1", $$file) }
-
-for (file, CHECKER_SOURCES)  { SOURCES += $$sprintf("checker/%1",  $$file) }
-for (file, CHECKER_HEADERS)  { HEADERS += $$sprintf("checker/%1",  $$file) }
-
-for (file, SVCORE_SOURCES)   { SOURCES += $$sprintf("svcore/%1", $$file) }
-for (file, SVCORE_HEADERS)   { HEADERS += $$sprintf("svcore/%1", $$file) }
-             
-for (file, CLIENT_HEADERS) {
-    HEADERS += $$sprintf("piper-cpp/vamp-client/%1",  $$file)
-}
-    
-SOURCES += piper-cpp/vamp-capnp/piper-capnp.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/base.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,60 @@
+
+TEMPLATE = lib
+
+exists(config.pri) {
+    include(config.pri)
+}
+
+!exists(config.pri) {
+    include(noconfig.pri)
+}
+
+include(base.pri)
+
+CONFIG += staticlib
+QT += network xml
+QT -= gui
+
+TARGET = base
+
+OBJECTS_DIR = o
+MOC_DIR = o
+
+exists(repoint.pri) {
+    include(repoint.pri)
+}
+
+include(bq-files.pri)
+include(vamp-plugin-sdk-files.pri)
+include(svcore/files.pri)
+include(capnp-regen.pri)
+
+DATAQUAY_SOURCES=$$fromfile(dataquay/lib.pro, SOURCES)
+DATAQUAY_HEADERS=$$fromfile(dataquay/lib.pro, HEADERS)
+
+CHECKER_SOURCES=$$fromfile(checker/checker.pri, SOURCES)
+CHECKER_HEADERS=$$fromfile(checker/checker.pri, HEADERS)
+                 
+CLIENT_HEADERS=$$fromfile(piper-cpp/vamp-client/qt/test.pro, HEADERS)
+
+for (file, BQ_SOURCES)       { SOURCES += $$file }
+for (file, BQ_HEADERS)       { HEADERS += $$file }
+
+for (file, VAMP_SOURCES)     { SOURCES += $$file }
+for (file, VAMP_HEADERS)     { HEADERS += $$file }
+
+for (file, DATAQUAY_SOURCES) { SOURCES += $$sprintf("dataquay/%1", $$file) }
+for (file, DATAQUAY_HEADERS) { HEADERS += $$sprintf("dataquay/%1", $$file) }
+
+for (file, CHECKER_SOURCES)  { SOURCES += $$sprintf("checker/%1",  $$file) }
+for (file, CHECKER_HEADERS)  { HEADERS += $$sprintf("checker/%1",  $$file) }
+
+for (file, SVCORE_SOURCES)   { SOURCES += $$sprintf("svcore/%1", $$file) }
+for (file, SVCORE_HEADERS)   { HEADERS += $$sprintf("svcore/%1", $$file) }
+             
+for (file, CLIENT_HEADERS) {
+    HEADERS += $$sprintf("piper-cpp/vamp-client/qt/%1",  $$file)
+}
+
+SOURCES += piper-cpp/vamp-capnp/piper-capnp.cpp
+
--- a/bq-files.pri	Mon Sep 17 13:53:25 2018 +0100
+++ b/bq-files.pri	Mon Sep 17 14:05:41 2018 +0100
@@ -21,6 +21,7 @@
 	bqaudioio/bqaudioio/SystemRecordSource.h \
 	bqaudioio/src/DynamicJACK.h \
 	bqaudioio/src/JACKAudioIO.h \
+	bqaudioio/src/Log.h \
 	bqaudioio/src/PortAudioIO.h \
 	bqaudioio/src/PulseAudioIO.h
 
@@ -32,6 +33,7 @@
 	bqresample/src/Resampler.cpp \
 	bqaudioio/src/AudioFactory.cpp \
 	bqaudioio/src/JACKAudioIO.cpp \
+	bqaudioio/src/Log.cpp \
 	bqaudioio/src/PortAudioIO.cpp \
 	bqaudioio/src/PulseAudioIO.cpp \
 	bqaudioio/src/ResamplerWrapper.cpp \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/capnp-regen.pri	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,36 @@
+
+capnpc.target = piper-cpp/vamp-capnp/piper.capnp.h
+capnpc.depends = $$PWD/piper/capnp/piper.capnp
+
+capnpc.commands = capnp compile --src-prefix=$$PWD/piper/capnp -oc++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends
+
+macx* {
+    exists(sv-dependency-builds) {
+        capnpc.commands=$$PWD/sv-dependency-builds/osx/bin/capnp -I$$PWD/sv-dependency-builds/osx/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/osx/bin/capnpc-c++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends
+    }
+}
+
+win32-g++ {
+    capnpc.commands=$$PWD/sv-dependency-builds/win32-mingw/bin/capnp -I$$PWD/sv-dependency-builds/win32-mingw/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/win32-mingw/bin/capnpc-c++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends
+}
+
+win32-msvc* {
+    # This config is actually for 64-bit Windows builds -- see
+    # comments in noconfig.pri.
+
+    # With MSVC2017 we have a problem that the header dependency is
+    # written out with the relative path from the build dir to the
+    # source dir (e.g. ..\sonic-visualiser\...) so if the header
+    # target path doesn't match that, the build fails before
+    # regenerating it. Not a problem with VC2015 for some reason.
+    # I hope using the relative path as target should fix it without
+    # breaking the VC2015 build.
+
+    capnpc.target = ../$$basename(PWD)/piper-cpp/vamp-capnp/piper.capnp.h
+    capnpc.commands=$$PWD/sv-dependency-builds/win64-msvc/bin/capnp -I$$PWD/sv-dependency-builds/win64-msvc/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/win64-msvc/bin/capnpc-c++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends
+}
+
+QMAKE_EXTRA_TARGETS += capnpc
+PRE_TARGETDEPS += $$capnpc.target
+QMAKE_CLEAN += $$capnpc.target
+
--- a/config.pri.in	Mon Sep 17 13:53:25 2018 +0100
+++ b/config.pri.in	Mon Sep 17 14:05:41 2018 +0100
@@ -1,6 +1,8 @@
 
 CONFIG += @QMAKE_CONFIG@
 
+PREFIX_PATH = @prefix@
+
 DEFINES += @HAVES@
 
 QMAKE_CC = @CC@
@@ -11,12 +13,15 @@
 QMAKE_CXXFLAGS += @CXXFLAGS@
 QMAKE_LFLAGS += @LDFLAGS@
 
-linux*:LIBS += -lasound -ldl
+CONFIG += @CXXSTANDARD@
+
+linux*:LIBS += -L$$PWD -lbase -lasound -ldl 
 
 macx*:DEFINES += HAVE_COREAUDIO
 macx*:LIBS += -framework CoreAudio -framework CoreMidi -framework AudioUnit -framework AudioToolbox -framework CoreFoundation -framework CoreServices
 
 LIBS += @LIBS@
 
-DEFINES += HAVE_PIPER HAVE_PLUGIN_CHECKER_HELPER
+linux*:LIBS -= -ljack
 
+DEFINES += HAVE_PIPER HAVE_PLUGIN_CHECKER_HELPER DYNAMIC_JACK
--- a/configure	Mon Sep 17 13:53:25 2018 +0100
+++ b/configure	Mon Sep 17 14:05:41 2018 +0100
@@ -624,6 +624,7 @@
 LIBOBJS
 QMAKE_CONFIG
 HAVES
+CXXSTANDARD
 CXXFLAGS_MINIMAL
 CUT
 SHA1SUM
@@ -650,8 +651,6 @@
 portaudio_CFLAGS
 liblo_LIBS
 liblo_CFLAGS
-kj_LIBS
-kj_CFLAGS
 capnp_LIBS
 capnp_CFLAGS
 serd_LIBS
@@ -768,8 +767,6 @@
 serd_LIBS
 capnp_CFLAGS
 capnp_LIBS
-kj_CFLAGS
-kj_LIBS
 liblo_CFLAGS
 liblo_LIBS
 portaudio_CFLAGS
@@ -1442,8 +1439,6 @@
   capnp_CFLAGS
               C compiler flags for capnp, overriding pkg-config
   capnp_LIBS  linker flags for capnp, overriding pkg-config
-  kj_CFLAGS   C compiler flags for kj, overriding pkg-config
-  kj_LIBS     linker flags for kj, overriding pkg-config
   liblo_CFLAGS
               C compiler flags for liblo, overriding pkg-config
   liblo_LIBS  linker flags for liblo, overriding pkg-config
@@ -4417,7 +4412,7 @@
 
 
 SV_DEFINES_DEBUG="-DDEBUG -DBUILD_DEBUG -DWANT_TIMING"
-SV_DEFINES_RELEASE="-DNDEBUG -DBUILD_RELEASE -DWANT_TIMING" # -DNO_TIMING"
+SV_DEFINES_RELEASE="-DNDEBUG -DBUILD_RELEASE -DNO_TIMING -DNO_HIT_COUNTS"
 SV_DEFINES_MINIMAL="$SV_DEFINES_RELEASE"
 
 # Now we have: USER_CXXFLAGS contains any flags the user set
@@ -4428,12 +4423,53 @@
 CXXFLAGS_DEBUG="$AUTOCONF_CXXFLAGS"
 CXXFLAGS_RELEASE="$AUTOCONF_CXXFLAGS"
 CXXFLAGS_MINIMAL="$AUTOCONF_CXXFLAGS"
+CXXSTANDARD=c++14
 
 if test "x$GCC" = "xyes"; then
-   	CXXFLAGS_ANY="-Wall -Wextra -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe"
-        CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g -Werror"
-   	CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0 -O2"
+   	CXXFLAGS_ANY="-fpic -Wall -Wextra -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe"
+        CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g -O2 -Werror"
+   	CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0 -O3 -ffast-math"
    	CXXFLAGS_MINIMAL="$CXXFLAGS_ANY -g0 -O0"
+        LIBS_DEBUG="$LIBS"
+        as_CACHEVAR=`$as_echo "ax_cv_check_cxxflags__--std=$CXXSTANDARD" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts --std=$CXXSTANDARD" >&5
+$as_echo_n "checking whether C++ compiler accepts --std=$CXXSTANDARD... " >&6; }
+if eval \${$as_CACHEVAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  ax_check_save_flags=$CXXFLAGS
+  CXXFLAGS="$CXXFLAGS  --std=$CXXSTANDARD"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  eval "$as_CACHEVAR=yes"
+else
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CXXFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then :
+  :
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Compiler does not appear to support $CXXSTANDARD, falling back to c++11" >&5
+$as_echo "$as_me: Compiler does not appear to support $CXXSTANDARD, falling back to c++11" >&6;}
+        CXXSTANDARD=c++11
+fi
+
 fi
 
 CXXFLAGS_BUILD="$CXXFLAGS_RELEASE"
@@ -4448,6 +4484,7 @@
 QMAKE_CONFIG="debug"
 CXXFLAGS_BUILD="$CXXFLAGS_DEBUG"
 SV_DEFINES_BUILD="$SV_DEFINES_DEBUG"
+LIBS="$LIBS_DEBUG"
 fi
 
 
@@ -5688,24 +5725,9 @@
 fi
 
 
-SV_MODULE_MODULE=capnp
-SV_MODULE_VERSION_TEST="capnp >= 0.6"
-SV_MODULE_HEADER=capnp/common.h
-SV_MODULE_LIB=capnp
-SV_MODULE_FUNC=
-SV_MODULE_HAVE=HAVE_$(echo capnp | tr 'a-z' 'A-Z')
-SV_MODULE_FAILED=1
-if test -n "$capnp_LIBS" ; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $capnp_CFLAGS"
-   LIBS="$LIBS $capnp_LIBS"
-   SV_MODULE_FAILED=""
-fi
-if test -z "$SV_MODULE_VERSION_TEST" ; then
-   SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
-fi
-if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
+# We need a Cap'n Proto version with the expectedSizeInWordsFromPrefix
+# function, which appeared in v0.6. If we can't find at least that
+# version with pkg-config, we check for the symbol with the compiler.
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for capnp" >&5
@@ -5715,12 +5737,124 @@
     pkg_cv_capnp_CFLAGS="$capnp_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"capnp >= 0.6\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "capnp >= 0.6") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_capnp_CFLAGS=`$PKG_CONFIG --cflags "capnp >= 0.6" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$capnp_LIBS"; then
+    pkg_cv_capnp_LIBS="$capnp_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"capnp >= 0.6\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "capnp >= 0.6") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_capnp_LIBS=`$PKG_CONFIG --libs "capnp >= 0.6" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        capnp_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "capnp >= 0.6" 2>&1`
+        else
+	        capnp_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "capnp >= 0.6" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$capnp_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find required module capnp using pkg-config, trying again by old-fashioned means" >&5
+$as_echo "$as_me: Failed to find required module capnp using pkg-config, trying again by old-fashioned means" >&6;}
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find required module capnp using pkg-config, trying again by old-fashioned means" >&5
+$as_echo "$as_me: Failed to find required module capnp using pkg-config, trying again by old-fashioned means" >&6;}
+else
+	capnp_CFLAGS=$pkg_cv_capnp_CFLAGS
+	capnp_LIBS=$pkg_cv_capnp_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVES="$HAVES HAVE_CAPNP";CXXFLAGS="$CXXFLAGS $capnp_CFLAGS";LIBS="$LIBS $capnp_LIBS"
+fi
+if test -z "$capnp_LIBS" ; then
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+        #include <capnp/serialize.h>
+        int main() {
+            kj::Array<capnp::word> prefix;
+            return capnp::expectedSizeInWordsFromPrefix(prefix.asPtr());
+        }
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  HAVES="$HAVES HAVE_CAPNP";LIBS="$LIBS -lcapnp -lkj"
+else
+  as_fn_error $? "Failed to find appropriate capnp library" "$LINENO" 5
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+SV_MODULE_MODULE=liblo
+SV_MODULE_VERSION_TEST=""
+SV_MODULE_HEADER=lo/lo.h
+SV_MODULE_LIB=lo
+SV_MODULE_FUNC=lo_address_new
+SV_MODULE_HAVE=HAVE_$(echo liblo | tr 'a-z' 'A-Z')
+SV_MODULE_FAILED=1
+if test -n "$liblo_LIBS" ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
+$as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
+   CXXFLAGS="$CXXFLAGS $liblo_CFLAGS"
+   LIBS="$LIBS $liblo_LIBS"
+   SV_MODULE_FAILED=""
+fi
+if test -z "$SV_MODULE_VERSION_TEST" ; then
+   SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
+fi
+if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for liblo" >&5
+$as_echo_n "checking for liblo... " >&6; }
+
+if test -n "$liblo_CFLAGS"; then
+    pkg_cv_liblo_CFLAGS="$liblo_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
   ($PKG_CONFIG --exists --print-errors "$SV_MODULE_VERSION_TEST") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_capnp_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_liblo_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -5728,8 +5862,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$capnp_LIBS"; then
-    pkg_cv_capnp_LIBS="$capnp_LIBS"
+if test -n "$liblo_LIBS"; then
+    pkg_cv_liblo_LIBS="$liblo_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -5737,7 +5871,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_capnp_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_liblo_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -5758,40 +5892,42 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        capnp_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        liblo_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        capnp_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        liblo_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$capnp_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
+	echo "$liblo_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
+$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
-else
-	capnp_CFLAGS=$pkg_cv_capnp_CFLAGS
-	capnp_LIBS=$pkg_cv_capnp_LIBS
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
+$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
+else
+	liblo_CFLAGS=$pkg_cv_liblo_CFLAGS
+	liblo_LIBS=$pkg_cv_liblo_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $capnp_CFLAGS";LIBS="$LIBS $capnp_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $liblo_CFLAGS";LIBS="$LIBS $liblo_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
    as_ac_Header=`$as_echo "ac_cv_header_$SV_MODULE_HEADER" | $as_tr_sh`
 ac_fn_cxx_check_header_mongrel "$LINENO" "$SV_MODULE_HEADER" "$as_ac_Header" "$ac_includes_default"
 if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  HAVES="$HAVES $SV_MODULE_HAVE"
-else
-  as_fn_error $? "Failed to find header $SV_MODULE_HEADER for required module $SV_MODULE_MODULE" "$LINENO" 5
-fi
-
-
-   if test -n "$SV_MODULE_LIB"; then
-     as_ac_Lib=`$as_echo "ac_cv_lib_$SV_MODULE_LIB''_$SV_MODULE_FUNC" | $as_tr_sh`
+  HAVES="$HAVES $SV_MODULE_HAVE";SV_MODULE_FAILED=""
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&5
+$as_echo "$as_me: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&6;}
+fi
+
+
+   if test -z "$SV_MODULE_FAILED"; then
+      if test -n "$SV_MODULE_LIB"; then
+           as_ac_Lib=`$as_echo "ac_cv_lib_$SV_MODULE_LIB''_$SV_MODULE_FUNC" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB" >&5
 $as_echo_n "checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB... " >&6; }
 if eval \${$as_ac_Lib+:} false; then :
@@ -5832,25 +5968,27 @@
 if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   LIBS="$LIBS -l$SV_MODULE_LIB"
 else
-  as_fn_error $? "Failed to find library $SV_MODULE_LIB for required module $SV_MODULE_MODULE" "$LINENO" 5
-fi
-
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&5
+$as_echo "$as_me: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&6;}
+fi
+
+      fi
    fi
 fi
 
 
-SV_MODULE_MODULE=kj
-SV_MODULE_VERSION_TEST="kj >= 0.6"
-SV_MODULE_HEADER=kj/common.h
-SV_MODULE_LIB=kj
-SV_MODULE_FUNC=
-SV_MODULE_HAVE=HAVE_$(echo kj | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=portaudio
+SV_MODULE_VERSION_TEST="portaudio-2.0 >= 19"
+SV_MODULE_HEADER=portaudio.h
+SV_MODULE_LIB=portaudio
+SV_MODULE_FUNC=Pa_IsFormatSupported
+SV_MODULE_HAVE=HAVE_$(echo portaudio | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$kj_LIBS" ; then
+if test -n "$portaudio_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $kj_CFLAGS"
-   LIBS="$LIBS $kj_LIBS"
+   CXXFLAGS="$CXXFLAGS $portaudio_CFLAGS"
+   LIBS="$LIBS $portaudio_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -5859,11 +5997,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kj" >&5
-$as_echo_n "checking for kj... " >&6; }
-
-if test -n "$kj_CFLAGS"; then
-    pkg_cv_kj_CFLAGS="$kj_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for portaudio" >&5
+$as_echo_n "checking for portaudio... " >&6; }
+
+if test -n "$portaudio_CFLAGS"; then
+    pkg_cv_portaudio_CFLAGS="$portaudio_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -5871,7 +6009,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_kj_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_portaudio_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -5879,8 +6017,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$kj_LIBS"; then
-    pkg_cv_kj_LIBS="$kj_LIBS"
+if test -n "$portaudio_LIBS"; then
+    pkg_cv_portaudio_LIBS="$portaudio_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -5888,7 +6026,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_kj_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_portaudio_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -5909,40 +6047,42 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        kj_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        portaudio_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        kj_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        portaudio_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$kj_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
+	echo "$portaudio_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
+$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 elif test $pkg_failed = untried; then
      	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
-else
-	kj_CFLAGS=$pkg_cv_kj_CFLAGS
-	kj_LIBS=$pkg_cv_kj_LIBS
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
+$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
+else
+	portaudio_CFLAGS=$pkg_cv_portaudio_CFLAGS
+	portaudio_LIBS=$pkg_cv_portaudio_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $kj_CFLAGS";LIBS="$LIBS $kj_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $portaudio_CFLAGS";LIBS="$LIBS $portaudio_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
    as_ac_Header=`$as_echo "ac_cv_header_$SV_MODULE_HEADER" | $as_tr_sh`
 ac_fn_cxx_check_header_mongrel "$LINENO" "$SV_MODULE_HEADER" "$as_ac_Header" "$ac_includes_default"
 if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  HAVES="$HAVES $SV_MODULE_HAVE"
-else
-  as_fn_error $? "Failed to find header $SV_MODULE_HEADER for required module $SV_MODULE_MODULE" "$LINENO" 5
-fi
-
-
-   if test -n "$SV_MODULE_LIB"; then
-     as_ac_Lib=`$as_echo "ac_cv_lib_$SV_MODULE_LIB''_$SV_MODULE_FUNC" | $as_tr_sh`
+  HAVES="$HAVES $SV_MODULE_HAVE";SV_MODULE_FAILED=""
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&5
+$as_echo "$as_me: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&6;}
+fi
+
+
+   if test -z "$SV_MODULE_FAILED"; then
+      if test -n "$SV_MODULE_LIB"; then
+           as_ac_Lib=`$as_echo "ac_cv_lib_$SV_MODULE_LIB''_$SV_MODULE_FUNC" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB" >&5
 $as_echo_n "checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB... " >&6; }
 if eval \${$as_ac_Lib+:} false; then :
@@ -5983,26 +6123,27 @@
 if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
   LIBS="$LIBS -l$SV_MODULE_LIB"
 else
-  as_fn_error $? "Failed to find library $SV_MODULE_LIB for required module $SV_MODULE_MODULE" "$LINENO" 5
-fi
-
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&5
+$as_echo "$as_me: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&6;}
+fi
+
+      fi
    fi
 fi
 
 
-
-SV_MODULE_MODULE=liblo
-SV_MODULE_VERSION_TEST=""
-SV_MODULE_HEADER=lo/lo.h
-SV_MODULE_LIB=lo
-SV_MODULE_FUNC=lo_address_new
-SV_MODULE_HAVE=HAVE_$(echo liblo | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=JACK
+SV_MODULE_VERSION_TEST="jack >= 0.100"
+SV_MODULE_HEADER=jack/jack.h
+SV_MODULE_LIB=jack
+SV_MODULE_FUNC=jack_client_open
+SV_MODULE_HAVE=HAVE_$(echo JACK | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$liblo_LIBS" ; then
+if test -n "$JACK_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $liblo_CFLAGS"
-   LIBS="$LIBS $liblo_LIBS"
+   CXXFLAGS="$CXXFLAGS $JACK_CFLAGS"
+   LIBS="$LIBS $JACK_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6011,11 +6152,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for liblo" >&5
-$as_echo_n "checking for liblo... " >&6; }
-
-if test -n "$liblo_CFLAGS"; then
-    pkg_cv_liblo_CFLAGS="$liblo_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5
+$as_echo_n "checking for JACK... " >&6; }
+
+if test -n "$JACK_CFLAGS"; then
+    pkg_cv_JACK_CFLAGS="$JACK_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6023,7 +6164,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_liblo_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6031,8 +6172,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$liblo_LIBS"; then
-    pkg_cv_liblo_LIBS="$liblo_LIBS"
+if test -n "$JACK_LIBS"; then
+    pkg_cv_JACK_LIBS="$JACK_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6040,7 +6181,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_liblo_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6061,12 +6202,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        liblo_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        liblo_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$liblo_PKG_ERRORS" >&5
+	echo "$JACK_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -6076,11 +6217,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	liblo_CFLAGS=$pkg_cv_liblo_CFLAGS
-	liblo_LIBS=$pkg_cv_liblo_LIBS
+	JACK_CFLAGS=$pkg_cv_JACK_CFLAGS
+	JACK_LIBS=$pkg_cv_JACK_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $liblo_CFLAGS";LIBS="$LIBS $liblo_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $JACK_CFLAGS";LIBS="$LIBS $JACK_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -6146,18 +6287,18 @@
 fi
 
 
-SV_MODULE_MODULE=portaudio
-SV_MODULE_VERSION_TEST="portaudio-2.0 >= 19"
-SV_MODULE_HEADER=portaudio.h
-SV_MODULE_LIB=portaudio
-SV_MODULE_FUNC=Pa_IsFormatSupported
-SV_MODULE_HAVE=HAVE_$(echo portaudio | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=libpulse
+SV_MODULE_VERSION_TEST="libpulse >= 0.9"
+SV_MODULE_HEADER=pulse/pulseaudio.h
+SV_MODULE_LIB=pulse
+SV_MODULE_FUNC=pa_stream_new
+SV_MODULE_HAVE=HAVE_$(echo libpulse | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$portaudio_LIBS" ; then
+if test -n "$libpulse_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $portaudio_CFLAGS"
-   LIBS="$LIBS $portaudio_LIBS"
+   CXXFLAGS="$CXXFLAGS $libpulse_CFLAGS"
+   LIBS="$LIBS $libpulse_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6166,11 +6307,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for portaudio" >&5
-$as_echo_n "checking for portaudio... " >&6; }
-
-if test -n "$portaudio_CFLAGS"; then
-    pkg_cv_portaudio_CFLAGS="$portaudio_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libpulse" >&5
+$as_echo_n "checking for libpulse... " >&6; }
+
+if test -n "$libpulse_CFLAGS"; then
+    pkg_cv_libpulse_CFLAGS="$libpulse_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6178,7 +6319,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_portaudio_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_libpulse_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6186,8 +6327,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$portaudio_LIBS"; then
-    pkg_cv_portaudio_LIBS="$portaudio_LIBS"
+if test -n "$libpulse_LIBS"; then
+    pkg_cv_libpulse_LIBS="$libpulse_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6195,7 +6336,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_portaudio_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_libpulse_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6216,12 +6357,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        portaudio_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        libpulse_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        portaudio_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        libpulse_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$portaudio_PKG_ERRORS" >&5
+	echo "$libpulse_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -6231,11 +6372,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	portaudio_CFLAGS=$pkg_cv_portaudio_CFLAGS
-	portaudio_LIBS=$pkg_cv_portaudio_LIBS
+	libpulse_CFLAGS=$pkg_cv_libpulse_CFLAGS
+	libpulse_LIBS=$pkg_cv_libpulse_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $portaudio_CFLAGS";LIBS="$LIBS $portaudio_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $libpulse_CFLAGS";LIBS="$LIBS $libpulse_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -6301,18 +6442,18 @@
 fi
 
 
-SV_MODULE_MODULE=JACK
-SV_MODULE_VERSION_TEST="jack >= 0.100"
-SV_MODULE_HEADER=jack/jack.h
-SV_MODULE_LIB=jack
-SV_MODULE_FUNC=jack_client_open
-SV_MODULE_HAVE=HAVE_$(echo JACK | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=lrdf
+SV_MODULE_VERSION_TEST="lrdf >= 0.2"
+SV_MODULE_HEADER=lrdf.h
+SV_MODULE_LIB=lrdf
+SV_MODULE_FUNC=lrdf_init
+SV_MODULE_HAVE=HAVE_$(echo lrdf | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$JACK_LIBS" ; then
+if test -n "$lrdf_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $JACK_CFLAGS"
-   LIBS="$LIBS $JACK_LIBS"
+   CXXFLAGS="$CXXFLAGS $lrdf_CFLAGS"
+   LIBS="$LIBS $lrdf_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6321,11 +6462,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JACK" >&5
-$as_echo_n "checking for JACK... " >&6; }
-
-if test -n "$JACK_CFLAGS"; then
-    pkg_cv_JACK_CFLAGS="$JACK_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lrdf" >&5
+$as_echo_n "checking for lrdf... " >&6; }
+
+if test -n "$lrdf_CFLAGS"; then
+    pkg_cv_lrdf_CFLAGS="$lrdf_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6333,7 +6474,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_JACK_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_lrdf_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6341,8 +6482,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$JACK_LIBS"; then
-    pkg_cv_JACK_LIBS="$JACK_LIBS"
+if test -n "$lrdf_LIBS"; then
+    pkg_cv_lrdf_LIBS="$lrdf_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6350,7 +6491,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_JACK_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_lrdf_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6371,12 +6512,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        JACK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        lrdf_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        JACK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        lrdf_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$JACK_PKG_ERRORS" >&5
+	echo "$lrdf_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -6386,11 +6527,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	JACK_CFLAGS=$pkg_cv_JACK_CFLAGS
-	JACK_LIBS=$pkg_cv_JACK_LIBS
+	lrdf_CFLAGS=$pkg_cv_lrdf_CFLAGS
+	lrdf_LIBS=$pkg_cv_lrdf_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $JACK_CFLAGS";LIBS="$LIBS $JACK_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $lrdf_CFLAGS";LIBS="$LIBS $lrdf_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -6456,18 +6597,18 @@
 fi
 
 
-SV_MODULE_MODULE=libpulse
-SV_MODULE_VERSION_TEST="libpulse >= 0.9"
-SV_MODULE_HEADER=pulse/pulseaudio.h
-SV_MODULE_LIB=pulse
-SV_MODULE_FUNC=pa_stream_new
-SV_MODULE_HAVE=HAVE_$(echo libpulse | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=oggz
+SV_MODULE_VERSION_TEST="oggz >= 1.0.0"
+SV_MODULE_HEADER=oggz/oggz.h
+SV_MODULE_LIB=oggz
+SV_MODULE_FUNC=oggz_run
+SV_MODULE_HAVE=HAVE_$(echo oggz | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$libpulse_LIBS" ; then
+if test -n "$oggz_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $libpulse_CFLAGS"
-   LIBS="$LIBS $libpulse_LIBS"
+   CXXFLAGS="$CXXFLAGS $oggz_CFLAGS"
+   LIBS="$LIBS $oggz_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6476,11 +6617,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libpulse" >&5
-$as_echo_n "checking for libpulse... " >&6; }
-
-if test -n "$libpulse_CFLAGS"; then
-    pkg_cv_libpulse_CFLAGS="$libpulse_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for oggz" >&5
+$as_echo_n "checking for oggz... " >&6; }
+
+if test -n "$oggz_CFLAGS"; then
+    pkg_cv_oggz_CFLAGS="$oggz_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6488,7 +6629,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_libpulse_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_oggz_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6496,8 +6637,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$libpulse_LIBS"; then
-    pkg_cv_libpulse_LIBS="$libpulse_LIBS"
+if test -n "$oggz_LIBS"; then
+    pkg_cv_oggz_LIBS="$oggz_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6505,7 +6646,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_libpulse_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_oggz_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6526,12 +6667,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        libpulse_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        oggz_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        libpulse_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        oggz_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$libpulse_PKG_ERRORS" >&5
+	echo "$oggz_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -6541,11 +6682,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	libpulse_CFLAGS=$pkg_cv_libpulse_CFLAGS
-	libpulse_LIBS=$pkg_cv_libpulse_LIBS
+	oggz_CFLAGS=$pkg_cv_oggz_CFLAGS
+	oggz_LIBS=$pkg_cv_oggz_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $libpulse_CFLAGS";LIBS="$LIBS $libpulse_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $oggz_CFLAGS";LIBS="$LIBS $oggz_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -6611,18 +6752,18 @@
 fi
 
 
-SV_MODULE_MODULE=lrdf
-SV_MODULE_VERSION_TEST="lrdf >= 0.2"
-SV_MODULE_HEADER=lrdf.h
-SV_MODULE_LIB=lrdf
-SV_MODULE_FUNC=lrdf_init
-SV_MODULE_HAVE=HAVE_$(echo lrdf | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=fishsound
+SV_MODULE_VERSION_TEST="fishsound >= 1.0.0"
+SV_MODULE_HEADER=fishsound/fishsound.h
+SV_MODULE_LIB=fishsound
+SV_MODULE_FUNC=fish_sound_new
+SV_MODULE_HAVE=HAVE_$(echo fishsound | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$lrdf_LIBS" ; then
+if test -n "$fishsound_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $lrdf_CFLAGS"
-   LIBS="$LIBS $lrdf_LIBS"
+   CXXFLAGS="$CXXFLAGS $fishsound_CFLAGS"
+   LIBS="$LIBS $fishsound_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6631,11 +6772,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lrdf" >&5
-$as_echo_n "checking for lrdf... " >&6; }
-
-if test -n "$lrdf_CFLAGS"; then
-    pkg_cv_lrdf_CFLAGS="$lrdf_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fishsound" >&5
+$as_echo_n "checking for fishsound... " >&6; }
+
+if test -n "$fishsound_CFLAGS"; then
+    pkg_cv_fishsound_CFLAGS="$fishsound_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6643,7 +6784,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_lrdf_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_fishsound_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6651,8 +6792,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$lrdf_LIBS"; then
-    pkg_cv_lrdf_LIBS="$lrdf_LIBS"
+if test -n "$fishsound_LIBS"; then
+    pkg_cv_fishsound_LIBS="$fishsound_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6660,7 +6801,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_lrdf_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_fishsound_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6681,12 +6822,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        lrdf_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        fishsound_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        lrdf_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        fishsound_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$lrdf_PKG_ERRORS" >&5
+	echo "$fishsound_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -6696,11 +6837,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	lrdf_CFLAGS=$pkg_cv_lrdf_CFLAGS
-	lrdf_LIBS=$pkg_cv_lrdf_LIBS
+	fishsound_CFLAGS=$pkg_cv_fishsound_CFLAGS
+	fishsound_LIBS=$pkg_cv_fishsound_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $lrdf_CFLAGS";LIBS="$LIBS $lrdf_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $fishsound_CFLAGS";LIBS="$LIBS $fishsound_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -6766,18 +6907,18 @@
 fi
 
 
-SV_MODULE_MODULE=oggz
-SV_MODULE_VERSION_TEST="oggz >= 1.0.0"
-SV_MODULE_HEADER=oggz/oggz.h
-SV_MODULE_LIB=oggz
-SV_MODULE_FUNC=oggz_run
-SV_MODULE_HAVE=HAVE_$(echo oggz | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=mad
+SV_MODULE_VERSION_TEST="mad >= 0.15.0"
+SV_MODULE_HEADER=mad.h
+SV_MODULE_LIB=mad
+SV_MODULE_FUNC=mad_decoder_init
+SV_MODULE_HAVE=HAVE_$(echo mad | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$oggz_LIBS" ; then
+if test -n "$mad_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $oggz_CFLAGS"
-   LIBS="$LIBS $oggz_LIBS"
+   CXXFLAGS="$CXXFLAGS $mad_CFLAGS"
+   LIBS="$LIBS $mad_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6786,11 +6927,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for oggz" >&5
-$as_echo_n "checking for oggz... " >&6; }
-
-if test -n "$oggz_CFLAGS"; then
-    pkg_cv_oggz_CFLAGS="$oggz_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mad" >&5
+$as_echo_n "checking for mad... " >&6; }
+
+if test -n "$mad_CFLAGS"; then
+    pkg_cv_mad_CFLAGS="$mad_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6798,7 +6939,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_oggz_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_mad_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6806,8 +6947,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$oggz_LIBS"; then
-    pkg_cv_oggz_LIBS="$oggz_LIBS"
+if test -n "$mad_LIBS"; then
+    pkg_cv_mad_LIBS="$mad_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6815,7 +6956,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_oggz_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_mad_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6836,12 +6977,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        oggz_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        mad_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        oggz_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        mad_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$oggz_PKG_ERRORS" >&5
+	echo "$mad_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -6851,11 +6992,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	oggz_CFLAGS=$pkg_cv_oggz_CFLAGS
-	oggz_LIBS=$pkg_cv_oggz_LIBS
+	mad_CFLAGS=$pkg_cv_mad_CFLAGS
+	mad_LIBS=$pkg_cv_mad_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $oggz_CFLAGS";LIBS="$LIBS $oggz_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $mad_CFLAGS";LIBS="$LIBS $mad_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -6921,18 +7062,18 @@
 fi
 
 
-SV_MODULE_MODULE=fishsound
-SV_MODULE_VERSION_TEST="fishsound >= 1.0.0"
-SV_MODULE_HEADER=fishsound/fishsound.h
-SV_MODULE_LIB=fishsound
-SV_MODULE_FUNC=fish_sound_new
-SV_MODULE_HAVE=HAVE_$(echo fishsound | tr 'a-z' 'A-Z')
+SV_MODULE_MODULE=id3tag
+SV_MODULE_VERSION_TEST="id3tag >= 0.15.0"
+SV_MODULE_HEADER=id3tag.h
+SV_MODULE_LIB=id3tag
+SV_MODULE_FUNC=id3_tag_new
+SV_MODULE_HAVE=HAVE_$(echo id3tag | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$fishsound_LIBS" ; then
+if test -n "$id3tag_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $fishsound_CFLAGS"
-   LIBS="$LIBS $fishsound_LIBS"
+   CXXFLAGS="$CXXFLAGS $id3tag_CFLAGS"
+   LIBS="$LIBS $id3tag_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -6941,11 +7082,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fishsound" >&5
-$as_echo_n "checking for fishsound... " >&6; }
-
-if test -n "$fishsound_CFLAGS"; then
-    pkg_cv_fishsound_CFLAGS="$fishsound_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for id3tag" >&5
+$as_echo_n "checking for id3tag... " >&6; }
+
+if test -n "$id3tag_CFLAGS"; then
+    pkg_cv_id3tag_CFLAGS="$id3tag_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6953,7 +7094,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_fishsound_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_id3tag_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6961,8 +7102,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$fishsound_LIBS"; then
-    pkg_cv_fishsound_LIBS="$fishsound_LIBS"
+if test -n "$id3tag_LIBS"; then
+    pkg_cv_id3tag_LIBS="$id3tag_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -6970,7 +7111,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_fishsound_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_id3tag_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -6991,12 +7132,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        fishsound_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        id3tag_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        fishsound_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        id3tag_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$fishsound_PKG_ERRORS" >&5
+	echo "$id3tag_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -7006,11 +7147,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	fishsound_CFLAGS=$pkg_cv_fishsound_CFLAGS
-	fishsound_LIBS=$pkg_cv_fishsound_LIBS
+	id3tag_CFLAGS=$pkg_cv_id3tag_CFLAGS
+	id3tag_LIBS=$pkg_cv_id3tag_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $fishsound_CFLAGS";LIBS="$LIBS $fishsound_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $id3tag_CFLAGS";LIBS="$LIBS $id3tag_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -7076,18 +7217,20 @@
 fi
 
 
-SV_MODULE_MODULE=mad
-SV_MODULE_VERSION_TEST="mad >= 0.15.0"
-SV_MODULE_HEADER=mad.h
-SV_MODULE_LIB=mad
-SV_MODULE_FUNC=mad_decoder_init
-SV_MODULE_HAVE=HAVE_$(echo mad | tr 'a-z' 'A-Z')
+# Link in -lX11 if it exists -- this is for the X error handler
+
+SV_MODULE_MODULE=X11
+SV_MODULE_VERSION_TEST="x11 >= 1.0.0"
+SV_MODULE_HEADER=X11/X.h
+SV_MODULE_LIB=x11
+SV_MODULE_FUNC=XGetErrorText
+SV_MODULE_HAVE=HAVE_$(echo X11 | tr 'a-z' 'A-Z')
 SV_MODULE_FAILED=1
-if test -n "$mad_LIBS" ; then
+if test -n "$X11_LIBS" ; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
 $as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $mad_CFLAGS"
-   LIBS="$LIBS $mad_LIBS"
+   CXXFLAGS="$CXXFLAGS $X11_CFLAGS"
+   LIBS="$LIBS $X11_LIBS"
    SV_MODULE_FAILED=""
 fi
 if test -z "$SV_MODULE_VERSION_TEST" ; then
@@ -7096,11 +7239,11 @@
 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mad" >&5
-$as_echo_n "checking for mad... " >&6; }
-
-if test -n "$mad_CFLAGS"; then
-    pkg_cv_mad_CFLAGS="$mad_CFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11" >&5
+$as_echo_n "checking for X11... " >&6; }
+
+if test -n "$X11_CFLAGS"; then
+    pkg_cv_X11_CFLAGS="$X11_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -7108,7 +7251,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_mad_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_X11_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -7116,8 +7259,8 @@
  else
     pkg_failed=untried
 fi
-if test -n "$mad_LIBS"; then
-    pkg_cv_mad_LIBS="$mad_LIBS"
+if test -n "$X11_LIBS"; then
+    pkg_cv_X11_LIBS="$X11_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
@@ -7125,7 +7268,7 @@
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_mad_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
+  pkg_cv_X11_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -7146,12 +7289,12 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        mad_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         else
-	        mad_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
+	        X11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$mad_PKG_ERRORS" >&5
+	echo "$X11_PKG_ERRORS" >&5
 
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
@@ -7161,11 +7304,11 @@
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
 $as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
 else
-	mad_CFLAGS=$pkg_cv_mad_CFLAGS
-	mad_LIBS=$pkg_cv_mad_LIBS
+	X11_CFLAGS=$pkg_cv_X11_CFLAGS
+	X11_LIBS=$pkg_cv_X11_LIBS
         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $mad_CFLAGS";LIBS="$LIBS $mad_LIBS";SV_MODULE_FAILED=""
+	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $X11_CFLAGS";LIBS="$LIBS $X11_LIBS";SV_MODULE_FAILED=""
 fi
 fi
 if test -n "$SV_MODULE_FAILED"; then
@@ -7231,316 +7374,7 @@
 fi
 
 
-SV_MODULE_MODULE=id3tag
-SV_MODULE_VERSION_TEST="id3tag >= 0.15.0"
-SV_MODULE_HEADER=id3tag.h
-SV_MODULE_LIB=id3tag
-SV_MODULE_FUNC=id3_tag_new
-SV_MODULE_HAVE=HAVE_$(echo id3tag | tr 'a-z' 'A-Z')
-SV_MODULE_FAILED=1
-if test -n "$id3tag_LIBS" ; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $id3tag_CFLAGS"
-   LIBS="$LIBS $id3tag_LIBS"
-   SV_MODULE_FAILED=""
-fi
-if test -z "$SV_MODULE_VERSION_TEST" ; then
-   SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
-fi
-if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for id3tag" >&5
-$as_echo_n "checking for id3tag... " >&6; }
-
-if test -n "$id3tag_CFLAGS"; then
-    pkg_cv_id3tag_CFLAGS="$id3tag_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$SV_MODULE_VERSION_TEST") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_id3tag_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$id3tag_LIBS"; then
-    pkg_cv_id3tag_LIBS="$id3tag_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$SV_MODULE_VERSION_TEST") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_id3tag_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        id3tag_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
-        else
-	        id3tag_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$id3tag_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
-elif test $pkg_failed = untried; then
-     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
-else
-	id3tag_CFLAGS=$pkg_cv_id3tag_CFLAGS
-	id3tag_LIBS=$pkg_cv_id3tag_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $id3tag_CFLAGS";LIBS="$LIBS $id3tag_LIBS";SV_MODULE_FAILED=""
-fi
-fi
-if test -n "$SV_MODULE_FAILED"; then
-   as_ac_Header=`$as_echo "ac_cv_header_$SV_MODULE_HEADER" | $as_tr_sh`
-ac_fn_cxx_check_header_mongrel "$LINENO" "$SV_MODULE_HEADER" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  HAVES="$HAVES $SV_MODULE_HAVE";SV_MODULE_FAILED=""
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&6;}
-fi
-
-
-   if test -z "$SV_MODULE_FAILED"; then
-      if test -n "$SV_MODULE_LIB"; then
-           as_ac_Lib=`$as_echo "ac_cv_lib_$SV_MODULE_LIB''_$SV_MODULE_FUNC" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB" >&5
-$as_echo_n "checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB... " >&6; }
-if eval \${$as_ac_Lib+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-l$SV_MODULE_LIB  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $SV_MODULE_FUNC ();
-int
-main ()
-{
-return $SV_MODULE_FUNC ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  eval "$as_ac_Lib=yes"
-else
-  eval "$as_ac_Lib=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-eval ac_res=\$$as_ac_Lib
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
-  LIBS="$LIBS -l$SV_MODULE_LIB"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&6;}
-fi
-
-      fi
-   fi
-fi
-
-
-# Link in -lX11 if it exists -- this is for the X error handler
-
-SV_MODULE_MODULE=X11
-SV_MODULE_VERSION_TEST="x11 >= 1.0.0"
-SV_MODULE_HEADER=X11/X.h
-SV_MODULE_LIB=x11
-SV_MODULE_FUNC=XGetErrorText
-SV_MODULE_HAVE=HAVE_$(echo X11 | tr 'a-z' 'A-Z')
-SV_MODULE_FAILED=1
-if test -n "$X11_LIBS" ; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE" >&6;}
-   CXXFLAGS="$CXXFLAGS $X11_CFLAGS"
-   LIBS="$LIBS $X11_LIBS"
-   SV_MODULE_FAILED=""
-fi
-if test -z "$SV_MODULE_VERSION_TEST" ; then
-   SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
-fi
-if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11" >&5
-$as_echo_n "checking for X11... " >&6; }
-
-if test -n "$X11_CFLAGS"; then
-    pkg_cv_X11_CFLAGS="$X11_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$SV_MODULE_VERSION_TEST") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_X11_CFLAGS=`$PKG_CONFIG --cflags "$SV_MODULE_VERSION_TEST" 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$X11_LIBS"; then
-    pkg_cv_X11_LIBS="$X11_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$SV_MODULE_VERSION_TEST\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$SV_MODULE_VERSION_TEST") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_X11_LIBS=`$PKG_CONFIG --libs "$SV_MODULE_VERSION_TEST" 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
-        else
-	        X11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$SV_MODULE_VERSION_TEST" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$X11_PKG_ERRORS" >&5
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
-elif test $pkg_failed = untried; then
-     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&5
-$as_echo "$as_me: Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means" >&6;}
-else
-	X11_CFLAGS=$pkg_cv_X11_CFLAGS
-	X11_LIBS=$pkg_cv_X11_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $X11_CFLAGS";LIBS="$LIBS $X11_LIBS";SV_MODULE_FAILED=""
-fi
-fi
-if test -n "$SV_MODULE_FAILED"; then
-   as_ac_Header=`$as_echo "ac_cv_header_$SV_MODULE_HEADER" | $as_tr_sh`
-ac_fn_cxx_check_header_mongrel "$LINENO" "$SV_MODULE_HEADER" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  HAVES="$HAVES $SV_MODULE_HAVE";SV_MODULE_FAILED=""
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE" >&6;}
-fi
-
-
-   if test -z "$SV_MODULE_FAILED"; then
-      if test -n "$SV_MODULE_LIB"; then
-           as_ac_Lib=`$as_echo "ac_cv_lib_$SV_MODULE_LIB''_$SV_MODULE_FUNC" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB" >&5
-$as_echo_n "checking for $SV_MODULE_FUNC in -l$SV_MODULE_LIB... " >&6; }
-if eval \${$as_ac_Lib+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-l$SV_MODULE_LIB  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $SV_MODULE_FUNC ();
-int
-main ()
-{
-return $SV_MODULE_FUNC ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  eval "$as_ac_Lib=yes"
-else
-  eval "$as_ac_Lib=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-eval ac_res=\$$as_ac_Lib
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
-  LIBS="$LIBS -l$SV_MODULE_LIB"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&5
-$as_echo "$as_me: Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE" >&6;}
-fi
-
-      fi
-   fi
-fi
+
 
 
 
@@ -8733,6 +8567,28 @@
 fi
 
 
+if test -x repoint ; then
+   if test -d .hg -o -d .git ; then
+      if ! ./repoint install; then
+         as_fn_error $? "Repoint failed; please fix any reported errors and try again" "$LINENO" 5
+      fi
+   else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: Repoint executable found but not in an Hg or Git working-copy: not running it" >&5
+$as_echo "$as_me: Repoint executable found but not in an Hg or Git working-copy: not running it" >&6;}
+      if ! test -d vamp-plugin-sdk ; then
+          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No vamp-plugin-sdk directory present, so external libraries might not have been updated" >&5
+$as_echo "$as_me: WARNING: No vamp-plugin-sdk directory present, so external libraries might not have been updated" >&2;}
+      fi
+   fi
+else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: No Repoint executable found: assuming external libraries are already here" >&5
+$as_echo "$as_me: No Repoint executable found: assuming external libraries are already here" >&6;}
+   if ! test -d vamp-plugin-sdk ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No vamp-plugin-sdk directory present, so external libraries might not have been updated" >&5
+$as_echo "$as_me: WARNING: No vamp-plugin-sdk directory present, so external libraries might not have been updated" >&2;}
+   fi
+fi
+
 if ! $QMAKE -r sonic-visualiser.pro; then
    as_fn_error $? "qmake failed: Command was \"$QMAKE -r\"" "$LINENO" 5
 fi
--- a/configure.ac	Mon Sep 17 13:53:25 2018 +0100
+++ b/configure.ac	Mon Sep 17 14:05:41 2018 +0100
@@ -40,7 +40,7 @@
 SV_CHECK_QT
 
 SV_DEFINES_DEBUG="-DDEBUG -DBUILD_DEBUG -DWANT_TIMING"
-SV_DEFINES_RELEASE="-DNDEBUG -DBUILD_RELEASE -DWANT_TIMING" # -DNO_TIMING"
+SV_DEFINES_RELEASE="-DNDEBUG -DBUILD_RELEASE -DNO_TIMING -DNO_HIT_COUNTS"
 SV_DEFINES_MINIMAL="$SV_DEFINES_RELEASE"
 
 # Now we have: USER_CXXFLAGS contains any flags the user set
@@ -51,12 +51,16 @@
 CXXFLAGS_DEBUG="$AUTOCONF_CXXFLAGS"
 CXXFLAGS_RELEASE="$AUTOCONF_CXXFLAGS"
 CXXFLAGS_MINIMAL="$AUTOCONF_CXXFLAGS"
+CXXSTANDARD=c++14
 
 if test "x$GCC" = "xyes"; then
-   	CXXFLAGS_ANY="-Wall -Wextra -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe"
-        CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g -Werror"
-   	CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0 -O2"
+   	CXXFLAGS_ANY="-fpic -Wall -Wextra -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe"
+        CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g -O2 -Werror"
+   	CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0 -O3 -ffast-math"
    	CXXFLAGS_MINIMAL="$CXXFLAGS_ANY -g0 -O0"
+        LIBS_DEBUG="$LIBS"
+        AX_CHECK_COMPILE_FLAG(--std=$CXXSTANDARD, [], [AC_MSG_NOTICE([Compiler does not appear to support $CXXSTANDARD, falling back to c++11])
+        CXXSTANDARD=c++11])
 fi
 
 CXXFLAGS_BUILD="$CXXFLAGS_RELEASE"
@@ -67,7 +71,8 @@
 AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug],[enable debug support [default=no]])],[AC_MSG_NOTICE([enabling debug build])
 QMAKE_CONFIG="debug"
 CXXFLAGS_BUILD="$CXXFLAGS_DEBUG"
-SV_DEFINES_BUILD="$SV_DEFINES_DEBUG"])
+SV_DEFINES_BUILD="$SV_DEFINES_DEBUG"
+LIBS="$LIBS_DEBUG"])
 
 if test x"$USER_CXXFLAGS" != x; then
    	AC_MSG_NOTICE([The CXXFLAGS environment variable is set to "$USER_CXXFLAGS".])
@@ -86,8 +91,23 @@
 SV_MODULE_REQUIRED([rubberband],[rubberband],[rubberband/RubberBandStretcher.h],[rubberband],[rubberband_new])
 SV_MODULE_REQUIRED([sord],[sord-0 >= 0.5],[sord/sord.h],[sord-0],[sord_world_new])
 SV_MODULE_REQUIRED([serd],[serd-0 >= 0.5],[serd/serd.h],[serd-0],[serd_reader_read_file])
-SV_MODULE_REQUIRED([capnp],[capnp >= 0.6],[capnp/common.h],[capnp],[])
-SV_MODULE_REQUIRED([kj],[kj >= 0.6],[kj/common.h],[kj],[])
+
+# We need a Cap'n Proto version with the expectedSizeInWordsFromPrefix
+# function, which appeared in v0.6. If we can't find at least that
+# version with pkg-config, we check for the symbol with the compiler.
+PKG_CHECK_MODULES([capnp],[capnp >= 0.6],[HAVES="$HAVES HAVE_CAPNP";CXXFLAGS="$CXXFLAGS $capnp_CFLAGS";LIBS="$LIBS $capnp_LIBS"],[AC_MSG_NOTICE([Failed to find required module capnp using pkg-config, trying again by old-fashioned means])])
+if test -z "$capnp_LIBS" ; then
+    AC_COMPILE_IFELSE([
+        AC_LANG_SOURCE([[
+        #include <capnp/serialize.h>
+        int main() {
+            kj::Array<capnp::word> prefix;
+            return capnp::expectedSizeInWordsFromPrefix(prefix.asPtr());
+        }]])],
+        [HAVES="$HAVES HAVE_CAPNP";LIBS="$LIBS -lcapnp -lkj"],
+        [AC_MSG_ERROR([Failed to find appropriate capnp library])]
+    )
+fi
 
 SV_MODULE_OPTIONAL([liblo],[],[lo/lo.h],[lo],[lo_address_new])
 SV_MODULE_OPTIONAL([portaudio],[portaudio-2.0 >= 19],[portaudio.h],[portaudio],[Pa_IsFormatSupported])
@@ -111,6 +131,7 @@
 AC_SUBST(CFLAGS)
 AC_SUBST(CXXFLAGS)
 AC_SUBST(CXXFLAGS_MINIMAL)
+AC_SUBST(CXXSTANDARD)
 AC_SUBST(LDFLAGS)
 AC_SUBST(HAVES)
 AC_SUBST(LIBS)
@@ -118,12 +139,32 @@
 AC_SUBST(CC)
 AC_SUBST(CXX)
 
+AC_SUBST(prefix)
+
 AC_SUBST(QMAKE_CONFIG)
 
 AC_CONFIG_FILES([config.pri])
 
 AC_OUTPUT
 
+if test -x repoint ; then
+   if test -d .hg -o -d .git ; then 
+      if ! ./repoint install; then
+         AC_MSG_ERROR([Repoint failed; please fix any reported errors and try again])
+      fi
+   else
+      AC_MSG_NOTICE([Repoint executable found but not in an Hg or Git working-copy: not running it])
+      if ! test -d vamp-plugin-sdk ; then
+          AC_MSG_WARN([No vamp-plugin-sdk directory present, so external libraries might not have been updated])
+      fi
+   fi
+else
+   AC_MSG_NOTICE([No Repoint executable found: assuming external libraries are already here])
+   if ! test -d vamp-plugin-sdk ; then
+      AC_MSG_WARN([No vamp-plugin-sdk directory present, so external libraries might not have been updated])
+   fi
+fi
+
 if ! $QMAKE -r sonic-visualiser.pro; then
    AC_MSG_ERROR([qmake failed: Command was "$QMAKE -r"])
 fi
--- a/convert.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/convert.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -1,7 +1,7 @@
 
 TEMPLATE = app
 
-CONFIG += stl c++11 exceptions console warn_on
+CONFIG += stl exceptions console warn_on 
 
 CONFIG -= qt
 
@@ -31,7 +31,7 @@
 OBJECTS_DIR = o
 MOC_DIR = o
 
-INCLUDEPATH += piper-cpp vamp-plugin-sdk
+INCLUDEPATH += piper-cpp piper-cpp/ext vamp-plugin-sdk
 
 include(vamp-plugin-sdk-files.pri)
 
@@ -44,5 +44,5 @@
 
 SOURCES += \
         piper-cpp/vamp-capnp/piper-capnp.cpp \
-        piper-cpp/json11/json11.cpp \
+        piper-cpp/ext/json11/json11.cpp \
         piper-cpp/vamp-server/convert.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/bintray.json	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,28 @@
+{
+    "package": {
+        "name": "sonic-visualiser",
+        "repo": "sonic-visualiser",
+        "subject": "sonic-visualiser",
+        "desc": "Sonic Visualiser",
+        "website_url": "https://sonicvisualiser.org/",
+        "vcs_url": "https://code.soundsoftware.ac.uk/hg/sonic-visualiser",
+        "licenses": ["GPL-2.0"],
+        "public_download_numbers": false,
+        "public_stats": false
+    },
+
+    "version": {
+        "name": "Continuous",
+        "desc": "Uploaded from continuous integration server"
+    },
+
+    "files": [
+        {
+            "includePattern": "\./(SonicVisualiser-.*-x86_64\\.AppImage)",
+            "uploadPattern": "$1",
+            "matrixParams": { "override": 1 }
+        }
+    ],
+
+    "publish": true
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/build-and-test-appimage.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Docker required
+
+set -eu
+
+current=$(hg id | awk '{ print $1; }')
+
+case "$current" in
+    *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we know we can check it out separately and obtain the same contents"; exit 2;;
+    *);;
+esac
+
+echo
+echo "Building appimage from revision $current..."
+
+dockerdir=deploy/linux/docker
+
+cat "$dockerdir"/Dockerfile_appimage.in | \
+    perl -p -e "s/\[\[REVISION\]\]/$current/g" > \
+         "$dockerdir"/Dockerfile_appimage.gen
+
+cat "$dockerdir"/Dockerfile_test_appimage.in | \
+    perl -p -e "s/\[\[REVISION\]\]/$current/g" > \
+         "$dockerdir"/Dockerfile_test_appimage.gen
+
+dockertag="cannam/sonic-visualiser-appimage-$current"
+
+sudo docker build -t "$dockertag" -f "$dockerdir"/Dockerfile_appimage.gen "$dockerdir"
+
+outdir="$dockerdir/output"
+mkdir -p "$outdir"
+
+container=$(sudo docker create "$dockertag")
+
+sudo docker cp "$container":output.tar "$outdir"
+sudo docker rm "$container"
+
+( cd "$outdir" ; tar xf output.tar && rm -f output.tar )
+
+sudo docker build -f "$dockerdir"/Dockerfile_test_appimage.gen "$dockerdir"
--- a/deploy/linux/deb-skeleton/usr/share/applications/sonic-visualiser.desktop	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/linux/deb-skeleton/usr/share/applications/sonic-visualiser.desktop	Mon Sep 17 14:05:41 2018 +0100
@@ -1,5 +1,7 @@
 [Desktop Entry]
 Name=Sonic Visualiser
+Comment=Viewing and analysing the contents of music audio files
+Comment[fr]=Affichage et analyse des contenus des fichiers audio de musique
 Exec=sonic-visualiser %U
 Keywords=audio; sound; visualiser; sonic;
 Terminal=false
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/deploy-appimage.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+set -eu
+
+program=sonic-visualiser
+checker=vamp-plugin-load-checker
+piper=piper-vamp-simple-server
+
+get_id() {
+    if [ -d .hg ]; then
+        hg id | sed 's/[+ ].*$//'
+    elif [ -d .git ]; then
+        git rev-parse --short HEAD
+    else
+        echo "WARNING: can't figure out revision from VCS metadata" 1>&2
+        echo "unknown"
+    fi
+}
+
+version=$(get_id)
+
+targetdir="${program}.AppDir"
+
+echo "Target dir is $targetdir"
+
+if [ -d "$targetdir" ]; then
+    echo "Target directory exists, not overwriting"
+    exit
+fi
+
+mkdir "$targetdir"
+
+mkdir -p "$targetdir"/usr/bin
+mkdir -p "$targetdir"/usr/lib
+
+cp "$program" "$checker" "$piper" "$targetdir"/usr/bin/
+
+ldd /usr/lib/x86_64-linux-gnu/libpulse.so.0 || true
+
+add_dependencies() {
+
+    local binary="$1"
+
+    echo "ldd $binary yields:"
+    ldd "$binary"
+    
+    for lib in $(ldd "$binary" | grep '=> [^ ]*/lib/' | \
+                     sed 's/^.*=> //' | sed 's/ .*$//'); do
+
+        base=$(basename "$lib")
+        if grep -v '^#' sv-dependency-builds/linux/appimage/excludelist |
+                grep -q "^$base$" ; then
+            echo "excluding: $lib"
+            continue
+        fi
+
+        target="$targetdir/usr/lib/$(basename $lib)"
+        
+        mkdir -p "$(dirname $target)"
+
+        if [ ! -f "$target" ]; then
+
+            cp -Lv "$lib" "$target"
+            chmod +x "$target"
+            
+            add_dependencies "$lib"
+            
+        fi
+    done
+}
+
+add_dependencies "$program"
+add_dependencies "$checker"
+add_dependencies "$piper"
+
+qtplugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen xcb"
+qtlibdirs="/usr/lib/x86_64-linux-gnu/qt5 /usr/lib/x86_64-linux-gnu/qt /usr/lib/qt5 /usr/lib/qt"
+
+QTDIR=${QTDIR:-}
+if [ -n "$QTDIR" ]; then
+    qtlibdirs="$QTDIR $qtlibdirs"
+fi
+
+for plug in $qtplugins; do
+    for libdir in $qtlibdirs; do
+        lib=$(find $libdir/plugins -name libq$plug.so -print 2>/dev/null || true)
+        if [ -n "$lib" ]; then
+            if [ -f "$lib" ]; then
+                subdir=$(basename $(dirname $lib))
+                if [ t"$subdir" = t"plugins" ]; then
+                    subdir=""
+                fi
+                target="$targetdir/usr/lib/qt5/plugins/$subdir/$(basename $lib)"
+                mkdir -p "$(dirname $target)"
+                cp -v "$lib" "$target"
+                chmod +x "$target"
+                add_dependencies "$lib"
+                break
+            fi
+        fi
+    done
+done
+
+cp "$program.desktop" "$targetdir/"
+
+cp "icons/sv-icon.svg" "$targetdir/"
+cp "icons/sonic-visualiser.svg" "$targetdir/"
+
+cp sv-dependency-builds/linux/appimage/AppRun-x86_64 "$targetdir/AppRun"
+chmod +x "$targetdir/AppRun"
+
+# Do this with a separate extraction step, so as to make it work even
+# in situations where FUSE is unavailable like in a Docker container
+export ARCH=x86_64
+sv-dependency-builds/linux/appimage/appimagetool-x86_64.AppImage --appimage-extract
+./squashfs-root/AppRun "$targetdir" "SonicVisualiser-$version-x86_64.AppImage"
+
--- a/deploy/linux/deploy-deb.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/linux/deploy-deb.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -1,6 +1,6 @@
 #!/bin/bash
 # 
-# Run this from the build root
+# Run this from the build root (with sudo, I think)
 
 usage() {
     echo
@@ -20,7 +20,11 @@
     usage
 fi
 
+set -eu
+
 program=sonic-visualiser
+checker=vamp-plugin-load-checker
+piper=piper-vamp-simple-server
 depdir=deploy/linux
 
 targetdir="${program}_${version}_${arch}"
@@ -38,7 +42,7 @@
 
 mkdir -p "$targetdir"/usr/bin "$targetdir"/usr/share/pixmaps
 
-cp "$program" "$targetdir"/usr/bin/
+cp "$program" "$checker" "$piper" "$targetdir"/usr/bin/
 
 cp icons/sv-icon*.svg "$targetdir"/usr/share/pixmaps/
 cp "$program".desktop "$targetdir"/usr/share/applications/
@@ -56,5 +60,5 @@
 
 bash "$depdir"/fix-lintian-bits.sh "$targetdir"
 
-sudo dpkg-deb --build "$targetdir" && lintian "$targetdir".deb
+dpkg-deb --build "$targetdir" && lintian "$targetdir".deb
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_appimage.in	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,69 @@
+# This pulls the latest versions of capnp & SV from repos - so you
+# will need to defeat the Docker cache by destroying the container
+# each time you want to update it
+#
+FROM ubuntu:14.04
+MAINTAINER Chris Cannam <cannam@all-day-breakfast.com>
+RUN apt-get update && \
+    apt-get install -y \
+    software-properties-common \
+    build-essential \
+    libbz2-dev \
+    libfftw3-dev \
+    libfishsound1-dev \
+    libid3tag0-dev \
+    liblo-dev \
+    liblrdf0-dev \
+    libmad0-dev \
+    liboggz2-dev \
+    libpulse-dev \
+    libasound2-dev \
+    libjack-dev \
+    libsamplerate-dev \
+    libsndfile-dev \
+    libsord-dev \
+    libxml2-utils \
+    libgl1-mesa-dev \
+    raptor-utils \
+    librubberband-dev \
+    git \
+    mercurial \
+    curl wget \
+    mlton \
+    autoconf automake libtool lintian
+
+# NB we do not install portaudio. We don't want to end up including it
+# in the bundle, because it comes with a dependency on the JACK
+# library which we don't want to bundle and can't assume people will
+# have. However, we do install JACK because the Dynamic JACK mechanism
+# should ensure we can detect, configure, and use that without
+# actually linking against it. We also have Pulse as the default I/O.
+
+RUN apt-add-repository -y ppa:beineri/opt-qt-5.10.1-trusty
+RUN apt-get update && \
+    apt-get install -y \
+    qt510base \
+    qt510svg
+RUN apt-get clean && rm -rf /var/lib/apt/lists/*
+
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8  
+ENV LANGUAGE en_US:en  
+ENV LC_ALL en_US.UTF-8
+
+RUN hg clone -r[[REVISION]] https://code.soundsoftware.ac.uk/hg/sonic-visualiser
+
+RUN git clone https://github.com/sandstorm-io/capnproto
+WORKDIR capnproto
+RUN git checkout v0.6.1
+WORKDIR c++
+RUN autoreconf -i && ./configure && make -j3 && make install
+
+WORKDIR ../../sonic-visualiser
+ENV QTDIR /opt/qt510
+ENV PATH /opt/qt510/bin:$PATH
+RUN ./configure
+RUN make -j3
+
+RUN deploy/linux/deploy-appimage.sh
+RUN tar cvf output.tar *.AppImage && cp output.tar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_test_appimage.in	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,8 @@
+FROM centos:7
+RUN yum update
+RUN yum -y groupinstall "X Window System"
+RUN yum -y install wget
+ADD output/SonicVisualiser-[[REVISION]]-x86_64.AppImage SV.AppImage
+RUN chmod +x SV.AppImage
+RUN ./SV.AppImage --appimage-extract
+RUN ./squashfs-root/AppRun
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_v3.0.1_ubuntu1604	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,43 @@
+FROM ubuntu:16.04
+MAINTAINER Chris Cannam <cannam@all-day-breakfast.com>
+RUN apt-get update && \
+    apt-get install -y \
+    build-essential \
+    libbz2-dev \
+    libfftw3-dev \
+    libfishsound1-dev \
+    libid3tag0-dev \
+    liblo-dev \
+    liblrdf0-dev \
+    libmad0-dev \
+    liboggz2-dev \
+    libpulse-dev \
+    libsamplerate-dev \
+    libsndfile-dev \
+    libsord-dev \
+    libxml2-utils \
+    portaudio19-dev \
+    qt5-default libqt5svg5-dev \
+    raptor-utils \
+    librubberband-dev \
+    git \
+    mercurial \
+    curl wget \
+    autoconf automake libtool lintian
+RUN apt-get clean && rm -rf /var/lib/apt/lists/*
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8  
+ENV LANGUAGE en_US:en  
+ENV LC_ALL en_US.UTF-8
+RUN git clone https://github.com/sandstorm-io/capnproto
+WORKDIR capnproto/c++
+RUN ./setup-autotools.sh && autoreconf -i 
+RUN ./configure --enable-static --disable-shared
+RUN make && make install
+WORKDIR ../..
+RUN hg clone -rsv_v3.0.1 https://code.soundsoftware.ac.uk/hg/sonic-visualiser
+WORKDIR sonic-visualiser
+RUN ./configure
+RUN make -j3
+RUN deploy/linux/deploy-deb.sh 3.0.1 amd64
+RUN tar cvf output.tar *.deb && cp output.tar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_v3.0.2_ubuntu1604	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,43 @@
+FROM ubuntu:16.04
+MAINTAINER Chris Cannam <cannam@all-day-breakfast.com>
+RUN apt-get update && \
+    apt-get install -y \
+    build-essential \
+    libbz2-dev \
+    libfftw3-dev \
+    libfishsound1-dev \
+    libid3tag0-dev \
+    liblo-dev \
+    liblrdf0-dev \
+    libmad0-dev \
+    liboggz2-dev \
+    libpulse-dev \
+    libsamplerate-dev \
+    libsndfile-dev \
+    libsord-dev \
+    libxml2-utils \
+    portaudio19-dev \
+    qt5-default libqt5svg5-dev \
+    raptor-utils \
+    librubberband-dev \
+    git \
+    mercurial \
+    curl wget \
+    autoconf automake libtool lintian
+RUN apt-get clean && rm -rf /var/lib/apt/lists/*
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8  
+ENV LANGUAGE en_US:en  
+ENV LC_ALL en_US.UTF-8
+RUN git clone https://github.com/sandstorm-io/capnproto
+WORKDIR capnproto/c++
+RUN ./setup-autotools.sh && autoreconf -i 
+RUN ./configure --enable-static --disable-shared
+RUN make && make install
+WORKDIR ../..
+RUN hg clone -rsv_v3.0.2 https://code.soundsoftware.ac.uk/hg/sonic-visualiser
+WORKDIR sonic-visualiser
+RUN ./configure
+RUN make -j3
+RUN deploy/linux/deploy-deb.sh 3.0.2 amd64
+RUN tar cvf output.tar *.deb && cp output.tar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_v3.0.3_ubuntu1604	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,44 @@
+FROM ubuntu:16.04
+MAINTAINER Chris Cannam <cannam@all-day-breakfast.com>
+RUN apt-get update && \
+    apt-get install -y \
+    build-essential \
+    libbz2-dev \
+    libfftw3-dev \
+    libfishsound1-dev \
+    libid3tag0-dev \
+    liblo-dev \
+    liblrdf0-dev \
+    libmad0-dev \
+    liboggz2-dev \
+    libpulse-dev \
+    libsamplerate-dev \
+    libsndfile-dev \
+    libsord-dev \
+    libxml2-utils \
+    portaudio19-dev \
+    qt5-default libqt5svg5-dev \
+    raptor-utils \
+    librubberband-dev \
+    git \
+    mercurial \
+    curl wget \
+    autoconf automake libtool lintian
+RUN apt-get clean && rm -rf /var/lib/apt/lists/*
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8  
+ENV LANGUAGE en_US:en  
+ENV LC_ALL en_US.UTF-8
+RUN curl -L -o capnproto-v0.6.0.tar.gz https://github.com/sandstorm-io/capnproto/archive/v0.6.0.tar.gz
+RUN tar xf capnproto-v0.6.0.tar.gz
+WORKDIR capnproto-0.6.0/c++
+RUN autoreconf -i 
+RUN ./configure --enable-static --disable-shared
+RUN make && make install
+WORKDIR ../..
+RUN hg clone -rsv_v3.0.3 https://code.soundsoftware.ac.uk/hg/sonic-visualiser
+WORKDIR sonic-visualiser
+RUN ./configure
+RUN make -j3
+RUN deploy/linux/deploy-deb.sh 3.0.3 amd64
+RUN tar cvf output.tar *.deb && cp output.tar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_v3.0_ubuntu1604	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,43 @@
+FROM ubuntu:16.04
+MAINTAINER Chris Cannam <cannam@all-day-breakfast.com>
+RUN apt-get update && \
+    apt-get install -y \
+    build-essential \
+    libbz2-dev \
+    libfftw3-dev \
+    libfishsound1-dev \
+    libid3tag0-dev \
+    liblo-dev \
+    liblrdf0-dev \
+    libmad0-dev \
+    liboggz2-dev \
+    libpulse-dev \
+    libsamplerate-dev \
+    libsndfile-dev \
+    libsord-dev \
+    libxml2-utils \
+    portaudio19-dev \
+    qt5-default libqt5svg5-dev \
+    raptor-utils \
+    librubberband-dev \
+    git \
+    mercurial \
+    curl wget \
+    autoconf automake libtool lintian
+RUN apt-get clean && rm -rf /var/lib/apt/lists/*
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8  
+ENV LANGUAGE en_US:en  
+ENV LC_ALL en_US.UTF-8
+RUN git clone https://github.com/sandstorm-io/capnproto
+WORKDIR capnproto/c++
+RUN ./setup-autotools.sh && autoreconf -i 
+RUN ./configure --enable-static --disable-shared
+RUN make && make install
+WORKDIR ../..
+RUN hg clone -rsv_v3.0 https://code.soundsoftware.ac.uk/hg/sonic-visualiser
+WORKDIR sonic-visualiser
+RUN ./configure
+RUN make -j3
+RUN deploy/linux/deploy-deb.sh 3.0 amd64
+RUN tar cvf output.tar *.deb && cp output.tar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/build.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+version=$(perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h | sed 's/-//g')
+
+dockerdir=./deploy/linux/docker
+if [ ! -d "$dockerdir" ]; then
+    echo "Run this script from the build root"
+    exit 2
+fi
+
+platform="$1"
+
+if [ -z "$platform" ] || [ -n "$2" ]; then
+    echo "Usage: $0 <platform>"
+    echo "where <platform> matches the suffix of the Docker file, e.g. ubuntu1604"
+    exit 2
+fi
+
+set -eu
+
+echo "Building for version $version, platform $platform"
+dockerfile="Dockerfile_v${version}_${platform}"
+
+if [ ! -f "$dockerdir/$dockerfile" ]; then
+    echo "No matching docker file $dockerfile found in $dockerdir, trying again without version"
+    dockerfile="Dockerfile_${platform}"
+    if [ ! -f "$dockerdir/$dockerfile" ]; then
+        echo "No matching docker file $dockerfile found in $dockerdir either"
+        exit 1
+    fi
+fi
+
+dockertag="cannam/sonic-visualiser-$platform"
+
+sudo docker build -t "$dockertag" -f "$dockerdir/$dockerfile" "$dockerdir"
+
+outdir="$dockerdir/output"
+mkdir -p "$outdir"
+
+container=$(sudo docker create "$dockertag")
+sudo docker cp "$container":output.tar "$outdir"
+sudo docker rm "$container"
+
+( cd "$outdir" ; tar xf output.tar && rm -f output.tar )
+
+echo
+echo "Done, output directory contains:"
+ls -ltr "$outdir"
--- a/deploy/linux/fix-lintian-bits.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/linux/fix-lintian-bits.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -4,6 +4,8 @@
 
 [ -d "$dir" ] || exit 1
 
+set -eu
+
 strip "$dir"/usr/bin/*
 
 sz=`du -sx --exclude DEBIAN "$dir" | awk '{ print $1; }'`
@@ -11,6 +13,6 @@
 
 find "$dir" -name \*~ -exec rm \{\} \;
 
-sudo chown -R root.root "$dir"/*
+chown -R root.root "$dir"/*
 
-sudo chmod -R g-w "$dir"/*
+chmod -R g-w "$dir"/*
--- a/deploy/osx/copy-qt.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/osx/copy-qt.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -11,7 +11,7 @@
 
 frameworks="QtCore QtNetwork QtGui QtXml QtSvg QtWidgets QtPrintSupport QtDBus"
 
-plugins="dds gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen"
+plugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen macstyle"
 
 qtdir=$(grep "Command:" Makefile | head -1 | awk '{ print $3; }' | sed s,/bin/.*,,)
 
@@ -29,6 +29,12 @@
 echo
 echo "Copying frameworks..."
 for fwk in $frameworks; do
+    if [ ! -d "$qtdir/lib/$fwk.framework" ]; then
+	if [ "$fwk" = "QtDBus" ]; then
+	    echo "QtDBus.framework not found, assuming Qt was built without DBus support"
+	    continue
+	fi
+    fi
     cp -v "$qtdir/lib/$fwk.framework/$fwk" "$fdir" || exit 2
 done
 
--- a/deploy/osx/deploy.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/osx/deploy.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -22,9 +22,10 @@
 
 version=`perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h`
 stem=${version%%-*}
+stem=${stem%%pre*}
 case "$stem" in
-    [0-9].[0-9]) bundleVersion="$version".0 ;;
-    [0-9].[0-9].[0-9]) bundleVersion="$version" ;;
+    [0-9].[0-9]) bundleVersion="$stem".0 ;;
+    [0-9].[0-9].[0-9]) bundleVersion="$stem" ;;
     *) echo "Error: Version stem $stem (of version $version) is neither two- nor three-part number" ;;
 esac
 
@@ -45,8 +46,8 @@
 cp deploy/osx/qt.conf "$source"/Contents/Resources/qt.conf
 
 echo
-echo "Copying in plugin load checker helper."
-cp checker/plugin-checker-helper "$source"/Contents/MacOS/
+echo "Copying in plugin load checker."
+cp checker/vamp-plugin-load-checker "$source"/Contents/MacOS/
 
 echo
 echo "Copying in plugin server."
@@ -71,9 +72,16 @@
 mkdir "$volume" || exit 1
 
 ln -s /Applications "$volume"/Applications
-cp README README.OSC COPYING CHANGELOG "$volume/"
+cp README.md "$volume/README.txt"
+cp README.OSC "$volume/README-OSC.txt"
+cp COPYING "$volume/COPYING.txt"
+cp CHANGELOG "$volume/CHANGELOG.txt"
+cp CITATION "$volume/CITATION.txt"
 cp -rp "$source" "$target"
 
+# update file timestamps so as to make the build date apparent
+find "$volume" -exec touch \{\} \;
+
 echo "Done"
 
 echo
@@ -86,7 +94,7 @@
 echo
 echo "Making dmg..."
 
-hdiutil create -srcfolder "$volume" "$dmg" -volname "$volume" && 
+hdiutil create -srcfolder "$volume" "$dmg" -volname "$volume" -fs HFS+ && 
 	rm -r "$volume"
 
 echo "Done"
--- a/deploy/osx/sign.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/osx/sign.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -13,15 +13,16 @@
 	exit 2
 fi
 for app in "$dir"/*.app; do
-    find "$app" -name Qt\* -print | while read fr; do
-	codesign -s "Developer ID Application: Chris Cannam" -fv "$fr"
-    done
-    find "$app" -name \*.dylib -print | while read fr; do
-	codesign -s "Developer ID Application: Chris Cannam" -fv "$fr"
-    done
-    find "$app/Contents/MacOS" -type f -print | while read fr; do
-	codesign -s "Developer ID Application: Chris Cannam" -fv "$fr"
-    done
+    codesign -s "Developer ID Application: Chris Cannam" -fv --deep "$app"
+#    find "$app" -name Qt\* -print | while read fr; do
+#	codesign -s "Developer ID Application: Chris Cannam" -fv "$fr"
+#    done
+#    find "$app" -name \*.dylib -print | while read fr; do
+#	codesign -s "Developer ID Application: Chris Cannam" -fv "$fr"
+#    done
+#    find "$app/Contents/MacOS" -type f -print | while read fr; do
+#	codesign -s "Developer ID Application: Chris Cannam" -fv "$fr"
+#    done
     codesign -s "Developer ID Application: Chris Cannam" -fv \
          --requirements '=designated =>  identifier "org.sonicvisualiser.SonicVisualiser" and ( (anchor apple generic and    certificate leaf[field.1.2.840.113635.100.6.1.9] ) or (anchor apple generic and    certificate 1[field.1.2.840.113635.100.6.2.6]  and    certificate leaf[field.1.2.840.113635.100.6.1.13] and    certificate leaf[subject.OU] = "M2H8666U82"))' \
          "$app"
--- a/deploy/src/archive-tip.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/src/archive-tip.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -1,8 +1,18 @@
 #!/bin/bash
 
-tag=`hg id | awk '{ print $1; }'`
+id=`hg id | awk '{ print $1; }'`
 
-echo "Packaging from tag $tag..."
+case "$id" in
+    *+) echo "ERROR: Current working copy has been modified - unmodified copy required"; exit 2;;
+    *);;
+esac
 
-hg archive -r"$tag" --subrepos --exclude sv-dependency-builds /tmp/sonic-visualiser-"$tag".tar.gz
+echo "Packaging from id $id..."
 
+hg update -r"$id"
+
+./repoint archive /tmp/sonic-visualiser-"$id".tar.gz --exclude sv-dependency-builds repoint.pri
+
+echo Done
+echo
+
--- a/deploy/src/archive.sh	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/src/archive.sh	Mon Sep 17 14:05:41 2018 +0100
@@ -6,10 +6,21 @@
 
 v=`echo "$tag" | sed 's/sv_v//' | sed 's/_.*$//'`
 
+current=$(hg id | awk '{ print $1; }')
+
+case "$current" in
+    *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we can update to tag and back again safely"; exit 2;;
+    *);;
+esac
+          
 echo
 echo -n "Packaging up version $v from tag $tag... "
 
-hg archive -r"$tag" --subrepos --exclude sv-dependency-builds /tmp/sonic-visualiser-"$v".tar.gz
+hg update -r"$tag"
+
+./repoint archive /tmp/sonic-visualiser-"$v".tar.gz --exclude sv-dependency-builds repoint.pri
+
+hg update -r"$current"
 
 echo Done
 echo
@@ -23,5 +34,7 @@
     echo "*** WARNING: Documentation URL returns a 404:"
     echo "***          $doc_url"
     echo "***          Please fix this before release!"
+    echo "***          And remember to update the link from"
+    echo "             http://www.sonicvisualiser.org/documentation.html !"
     echo
 fi
--- a/deploy/win32/README-Vamp.txt	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/win32/README-Vamp.txt	Mon Sep 17 14:05:41 2018 +0100
@@ -1,5 +1,5 @@
 
-To add Vamp audio analysis plugins to the Transform menu in
-Sonic Visualiser, unpack them into this directory.
+To add 32-bit Vamp audio analysis plugins to the Transform menu in
+Sonic Visualiser, unpack and copy them into this directory.
 
 See http://vamp-plugins.org/ for more information.
--- a/deploy/win32/build.cmd	Mon Sep 17 13:53:25 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-@ECHO OFF
-SET WIXPATH="C:\Program Files (x86)\WiX Toolset v3.9\bin"
-IF NOT EXIST %WIXPATH% (
-    SET WIXPATH="C:\Program Files\WiX Toolset v3.9\bin"
-)
-DEL sonic-visualiser.msi
-%WIXPATH%\candle.exe -v sonic-visualiser.wxs
-%WIXPATH%\light.exe -b ..\.. -ext WixUIExtension -v sonic-visualiser.wixobj
-PAUSE
-DEL sonic-visualiser.wixobj
-DEL sonic-visualiser.wixpdb
Binary file deploy/win32/main.bmp has changed
--- a/deploy/win32/sonic-visualiser.wxs	Mon Sep 17 13:53:25 2018 +0100
+++ b/deploy/win32/sonic-visualiser.wxs	Mon Sep 17 14:05:41 2018 +0100
@@ -5,15 +5,15 @@
       Id="*"
       Language="1033"
       Codepage="1252" 
-      Version="2.5.0"
+      Version="3.2"
       UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0"
       Manufacturer="Queen Mary, University of London">
     
     <Package
         Id="*"
         Keywords="Installer"
-        Description="Sonic Visualiser Installer" 
-        Comments="Copyright (c) 2014 Queen Mary, University of London and others."
+        Description="Sonic Visualiser 32-bit Installer" 
+        Comments="Copyright (c) 2018 Queen Mary, University of London and others."
         Manufacturer="Queen Mary, University of London" 
         InstallerVersion="100" 
         Languages="1033" 
@@ -26,174 +26,193 @@
     <Property Id="DiskPrompt" Value="Sonic Visualiser Installation [1]"/>
 
     <Directory Id="TARGETDIR" Name="SourceDir">
+
       <Directory Id="ProgramFilesFolder" Name="PFiles">
         <Directory Id="VampPlugins" Name="Vamp Plugins">
-            <Component
-                Id="VampPlugins"
-                Guid="E68E4E0B-3C63-49bd-AD2D-44431EABDA6A">
-                <File
-                    Id="VampREADME"
-                    Name="README.txt"
-                    DiskId="1"
-                    Source="deploy\win32\README-Vamp.txt"/>
-            </Component>
+          <Component
+              Id="VampPlugins"
+              Guid="E68E4E0B-3C63-49bd-AD2D-44431EABDA6A">
+            <File
+                Id="VampREADME"
+                Name="README.txt"
+                Source="..\deploy\win32\README-Vamp.txt"/>
+          </Component>
         </Directory>
         <Directory Id="APPLICATIONFOLDER" Name="Sonic Visualiser">
-            
-            <Component
-                Id="MainExecutable"
-                Guid="2C02DFB7-3CDF-4F73-B9D1-846326EE417D">
 
-              <File
-                  Id="SVExecutable"
-                  Name="Sonic Visualiser.exe"
-                  DiskId="1"
-                  Source="release\Sonic Visualiser.exe"
-                  KeyPath="yes">
+          <Component
+              Id="MainExecutable"
+              Guid="2C02DFB7-3CDF-4F73-B9D1-846326EE417D">
 
-                <Shortcut
-                    Id="SVStartEntry"
-                    Directory="ProgramMenuDir"
-                    Name="Sonic Visualiser"
-                    WorkingDirectory="APPLICATIONFOLDER"
-                    Icon="winicon.ico"
-                    IconIndex="0"
-                    Advertise="yes"/>
+            <File
+                Id="SVExecutable"
+                Name="Sonic Visualiser.exe"
+                Source="release\Sonic Visualiser.exe"
+                KeyPath="yes">
 
-                <Shortcut
-                    Id="SVDesktop"
-                    Directory="DesktopFolder"
-                    Name="Sonic Visualiser"
-                    WorkingDirectory="APPLICATIONFOLDER"
-                    Icon="winicon.ico"
-                    IconIndex="0"
-                    Advertise="yes"/>
-              </File>
+              <Shortcut
+                  Id="SVStartEntry"
+                  Directory="ProgramMenuDir"
+                  Name="Sonic Visualiser"
+                  WorkingDirectory="APPLICATIONFOLDER"
+                  Icon="winicon.ico"
+                  IconIndex="0"
+                  Advertise="yes"/>
 
-              <File
-                  Id="COPYING"
-                  Name="COPYING"
-                  DiskId="1"
-                  Source="COPYING"/>
-              <File
-                  Id="README"
-                  Name="README"
-                  DiskId="1"
-                  Source="README"/>
-              <File
-                  Id="CHANGELOG"
-                  Name="CHANGELOG"
-                  DiskId="1"
-                  Source="CHANGELOG"/>
+              <Shortcut
+                  Id="SVDesktop"
+                  Directory="DesktopFolder"
+                  Name="Sonic Visualiser"
+                  WorkingDirectory="APPLICATIONFOLDER"
+                  Icon="winicon.ico"
+                  IconIndex="0"
+                  Advertise="yes"/>
+            </File>
 
-              <File
-                  Id="winicon.ico"
-                  Name="sv-winicon.ico"
-                  DiskId="1"
-                  Source="icons/sv-winicon.ico"/>
-            </Component>
-            
-            <Component
+            <File
+                Id="COPYING"
+                Name="COPYING.txt"
+                Source="..\COPYING"/>
+            <File
+                Id="README"
+                Name="README.txt"
+                Source="..\README.md"/>
+            <File
+                Id="CHANGELOG"
+                Name="CHANGELOG.txt"
+                Source="..\CHANGELOG"/>
+
+            <File
+                Id="winicon.ico"
+                Name="sv-winicon.ico"
+                Source="..\icons/sv-winicon.ico"/>
+          </Component>
+          
+          <Component
               Id="SVFileAssociation"
               Guid="DC6B3DD1-46DE-47FC-90FB-D8ACD5D1A88A">
-              
-              <ProgId 
+            
+            <CreateFolder/>
+
+            <ProgId 
                 Id='SonicVisualiser.svfile' 
                 Description='Sonic Visualiser project file'
                 Icon="SVExecutable">
-                <Extension 
+              <Extension 
                   Id='sv' 
                   ContentType='application/sonicvisualiser'>
-                  <Verb 
+                <Verb 
                     Id='open' 
                     Command='Open' 
                     TargetFile='SVExecutable' 
                     Argument='"%1"' />
-                </Extension>
-              </ProgId>
-              
+              </Extension>
+            </ProgId>
+            
+          </Component>
+          
+          <Component
+              Id="Qt5"
+              Guid="316341D4-B7B2-411D-BCCE-879A11D5709F">
+            <File
+                Id="QtCore"
+                Name="Qt5Core.dll"
+                Source="release\Qt5Core.dll"
+		KeyPath="yes"/>
+            <File
+                Id="QtGui"
+                Name="Qt5Gui.dll"
+                Source="release\Qt5Gui.dll"/>
+            <File
+                Id="QtNetwork"
+                Name="Qt5Network.dll"
+                Source="release\Qt5Network.dll"/>
+            <File
+                Id="QtWidgets"
+                Name="Qt5Widgets.dll"
+                Source="release\Qt5Widgets.dll"/>
+            <File
+                Id="QtXml"
+                Name="Qt5Xml.dll"
+                Source="release\Qt5Xml.dll"/>
+            <File
+                Id="QtSvg"
+                Name="Qt5Svg.dll"
+                Source="release\Qt5Svg.dll"/>
+            <File
+                Id="libgcc"
+                Name="libgcc_s_dw2-1.dll"
+                Source="release\libgcc_s_dw2-1.dll"/>
+            <File
+                Id="libstdcplusplus"
+                Name="libstdc++-6.dll"
+                Source="release\libstdc++-6.dll"/>
+            <File
+                Id="libwinpthread"
+                Name="libwinpthread-1.dll"
+                Source="release\libwinpthread-1.dll"/>
+          </Component>
+	  
+	  <Directory Id="Platforms" Name="platforms">
+            <Component
+                Id="Qt5PlatformPlugins"
+                Guid="1EDCEA4B-C83F-430B-B09D-CB113DFD4E77">
+	      <File
+                  Id="qminimal"
+                  Name="qminimal.dll"
+                  Source="release\qminimal.dll"/>
+	      <File
+                  Id="qwindows"
+                  Name="qwindows.dll"
+                  Source="release\qwindows.dll"/>
             </Component>
-            
+	  </Directory>
+	  
+	  <Directory Id="Styles" Name="styles">
             <Component
-                Id="Qt5"
-                Guid="316341D4-B7B2-411D-BCCE-879A11D5709F">
-              <File
-                  Id="QtCore"
-                  Name="Qt5Core.dll"
-                  DiskId="1"
-                  Source="release\Qt5Core.dll"
-		  KeyPath="yes"/>
-              <File
-                  Id="QtGui"
-                  Name="Qt5Gui.dll"
-                  DiskId="1"
-                  Source="release\Qt5Gui.dll"/>
-              <File
-                  Id="QtNetwork"
-                  Name="Qt5Network.dll"
-                  DiskId="1"
-                  Source="release\Qt5Network.dll"/>
-              <File
-                  Id="QtWidgets"
-                  Name="Qt5Widgets.dll"
-                  DiskId="1"
-                  Source="release\Qt5Widgets.dll"/>
-              <File
-                  Id="QtXml"
-                  Name="Qt5Xml.dll"
-                  DiskId="1"
-                  Source="release\Qt5Xml.dll"/>
-              <File
-                  Id="icudt53"
-                  Name="icudt53.dll"
-                  DiskId="1"
-                  Source="release\icudt53.dll"/>
-              <File
-                  Id="icuin53"
-                  Name="icuin53.dll"
-                  DiskId="1"
-                  Source="release\icuin53.dll"/>
-              <File
-                  Id="icuuc53"
-                  Name="icuuc53.dll"
-                  DiskId="1"
-                  Source="release\icuuc53.dll"/>
-              <File
-                  Id="libgcc"
+                Id="Qt5StylePlugins"
+                Guid="049AD156-CBC3-457A-980F-3C01FF89C054">
+	      <File
+                  Id="qwindowsvistastyle"
+                  Name="qwindowsvistastyle.dll"
+                  Source="release\qwindowsvistastyle.dll"/>
+            </Component>
+	  </Directory>
+
+	  <Directory Id="Helpers" Name="helpers">
+            <Component Id="Piper"
+                       Guid="17F2AAFF-7B7B-4F20-B345-DEF0A54A84B1">
+	      <File
+		  Id="piperconv"
+		  Name="piper-convert.exe"
+		  Source="release\piper-convert.exe"/>
+	      <File
+		  Id="piper"
+		  Name="piper-vamp-simple-server.exe"
+		  Source="release\piper-vamp-simple-server.exe"/>
+	      <File
+                  Id="libgcc32"
                   Name="libgcc_s_dw2-1.dll"
-                  DiskId="1"
                   Source="release\libgcc_s_dw2-1.dll"/>
-              <File
-                  Id="libstdcplusplus"
+	      <File
+                  Id="libstdcplusplus32"
                   Name="libstdc++-6.dll"
-                  DiskId="1"
                   Source="release\libstdc++-6.dll"/>
-              <File
-                  Id="libwinpthread"
+	      <File
+                  Id="libwinpthread32"
                   Name="libwinpthread-1.dll"
-                  DiskId="1"
                   Source="release\libwinpthread-1.dll"/>
-            </Component>
-	    
-	    <Directory Id="Platforms" Name="platforms">
-              <Component
-                  Id="Qt5PlatformPlugins"
-                  Guid="1EDCEA4B-C83F-430B-B09D-CB113DFD4E77">
-		<File
-                    Id="qminimal"
-                    Name="qminimal.dll"
-                    DiskId="1"
-                    Source="release\qminimal.dll"/>
-		<File
-                    Id="qwindows"
-                    Name="qwindows.dll"
-                    DiskId="1"
-                    Source="release\qwindows.dll"/>
-              </Component>
-	    </Directory>
-
-        </Directory>
-      </Directory>
+	    </Component>
+            <Component Id="Checker"
+                       Guid="DB09B035-0594-4876-B494-4D25CED43601">
+	      <File
+		  Id="checker"
+		  Name="vamp-plugin-load-checker.exe"
+		  Source="release\vamp-plugin-load-checker.exe"/>
+	    </Component>
+	  </Directory> <!-- helpers -->
+        </Directory> <!-- sv --> 
+      </Directory> <!-- pfiles -->
       
       <Directory Id="ProgramMenuFolder" Name="Programs">
         <Directory Id="ProgramMenuDir" Name="Sonic Visualiser">
@@ -209,18 +228,21 @@
     </Directory>
 
     <Feature 
-      Id="Complete"
-      Title="Required files"
-      Description="Installs the required files for running Sonic Visualiser."
-      AllowAdvertise="no"
-      Absent="disallow"
-      ConfigurableDirectory="APPLICATIONFOLDER"
-      Level="1">
+        Id="Complete"
+        Title="Required files"
+        Description="Installs the required files for running Sonic Visualiser."
+        AllowAdvertise="no"
+        Absent="disallow"
+        ConfigurableDirectory="APPLICATIONFOLDER"
+        Level="1">
       <ComponentRef Id="VampPlugins"/>
       <ComponentRef Id="MainExecutable"/>
       <ComponentRef Id="SVFileAssociation"/>
       <ComponentRef Id="Qt5"/>
       <ComponentRef Id="Qt5PlatformPlugins"/>
+      <ComponentRef Id="Qt5StylePlugins"/>
+      <ComponentRef Id="Piper"/>
+      <ComponentRef Id="Checker"/>
       <ComponentRef Id="ProgramMenuDir"/>
     </Feature>
 
@@ -233,11 +255,14 @@
     <Property Id="WIXUI_DONTVALIDATEPATH" Value="1" />
     <Property Id="ApplicationFolderName" Value="Sonic Visualiser" />
     <Property Id="WixAppFolder" Value="WixPerMachineFolder" />
-    <WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
+    <WixVariable Id="WixUILicenseRtf" Value="..\deploy\win32\License.rtf" />
     
-    <Icon Id="winicon.ico" SourceFile="icons/sv-winicon.ico"/>
+    <Icon Id="winicon.ico" SourceFile="..\icons\sv-winicon.ico"/>
     <Property Id="ARPPRODUCTICON" Value="winicon.ico" />
-        
+
+    <WixVariable Id="WixUIBannerBmp" Value="..\deploy\win32\top.bmp"/>
+    <WixVariable Id="WixUIDialogBmp" Value="..\deploy\win32\main.bmp"/>
+
   </Product>
 </Wix>
 
Binary file deploy/win32/top.bmp has changed
Binary file deploy/win64/License.rtf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/README-Vamp.txt	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,8 @@
+
+To add 64-bit Vamp audio analysis plugins to the Transform menu in
+Sonic Visualiser, unpack and copy them into this directory.
+
+(For 32-bit plugins, put them in "C:\Program Files (x86)\Vamp Plugins"
+instead, or the equivalent in your local language edition of Windows.)
+
+See http://vamp-plugins.org/ for more information.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/README-Vamp32.txt	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,8 @@
+
+To add 32-bit Vamp audio analysis plugins to the Transform menu in
+Sonic Visualiser, unpack and copy them into this directory.
+
+(For 64-bit plugins, put them in "C:\Program Files\Vamp Plugins"
+instead, or the equivalent in your local language edition of Windows.)
+
+See http://vamp-plugins.org/ for more information.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/build-32.bat	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,55 @@
+rem  Run this from within the top-level SV dir: deploy\win64\build-32.bat
+rem  To build from clean, delete the folder build_win32
+
+set STARTPWD=%CD%
+
+set QTDIR=C:\Qt\5.11.1\mingw53_32
+if not exist %QTDIR% (
+@   echo Could not find 32-bit Qt
+@   exit /b 2
+)
+
+set ORIGINALPATH=%PATH%
+set PATH=%PATH%;C:\Program Files (x86)\SMLNJ\bin;%QTDIR%\bin;C:\Qt\Tools\QtCreator\bin;C:\Qt\Tools\mingw530_32\bin
+
+cd %STARTPWD%
+
+call .\repoint install
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+sv-dependency-builds\win32-mingw\bin\capnp -Isv-dependency-builds/win32-mingw/include compile --src-prefix=piper/capnp -osv-dependency-builds/win32-mingw/bin/capnpc-c++:piper-cpp/vamp-capnp piper/capnp/piper.capnp
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+mkdir build_win32
+cd build_win32
+
+qmake -spec win32-g++ -r ..\sonic-visualiser.pro
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+mingw32-make
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+copy .\checker\release\vamp-plugin-load-checker.exe .\release
+
+copy %QTDIR%\bin\Qt5Core.dll .\release
+copy %QTDIR%\bin\Qt5Gui.dll .\release
+copy %QTDIR%\bin\Qt5Widgets.dll .\release
+copy %QTDIR%\bin\Qt5Network.dll .\release
+copy %QTDIR%\bin\Qt5Xml.dll .\release
+copy %QTDIR%\bin\Qt5Svg.dll .\release
+copy %QTDIR%\bin\Qt5Test.dll .\release
+copy %QTDIR%\bin\libgcc_s_dw2-1.dll .\release
+copy %QTDIR%\bin\"libstdc++-6.dll" .\release
+copy %QTDIR%\bin\libwinpthread-1.dll .\release
+copy %QTDIR%\plugins\platforms\qminimal.dll .\release
+copy %QTDIR%\plugins\platforms\qwindows.dll .\release
+copy %QTDIR%\plugins\styles\qwindowsvistastyle.dll .\release
+
+rem some of these expect to be run from the project root
+cd ..
+build_win32\release\test-svcore-base
+build_win32\release\test-svcore-system
+build_win32\release\test-svcore-data-fileio
+build_win32\release\test-svcore-data-model
+
+set PATH=%ORIGINALPATH%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/build-64.bat	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,62 @@
+rem  Run this from within the top-level SV dir: deploy\win64\build-64.bat
+rem  To build from clean, delete the folder build_win64 first
+
+echo on
+
+set STARTPWD=%CD%
+
+set QTDIR=C:\Qt\5.11.1\msvc2017_64
+if not exist %QTDIR% (
+@   echo Could not find 64-bit Qt
+@   exit /b 2
+)
+
+if not exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" (
+@   echo "Could not find MSVC vars batch file"
+@   exit /b 2
+)
+
+call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
+
+set ORIGINALPATH=%PATH%
+set PATH=%PATH%;C:\Program Files (x86)\SMLNJ\bin;%QTDIR%\bin
+
+cd %STARTPWD%
+
+call .\repoint install
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+sv-dependency-builds\win64-msvc\bin\capnp -Isv-dependency-builds/win64-msvc/include compile --src-prefix=piper/capnp -osv-dependency-builds/win64-msvc/bin/capnpc-c++:piper-cpp/vamp-capnp piper/capnp/piper.capnp
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+mkdir build_win64
+cd build_win64
+
+qmake -spec win32-msvc -r -tp vc ..\sonic-visualiser.pro
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+msbuild sonic-visualiser.sln /t:Build /p:Configuration=Release
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+copy .\checker\release\vamp-plugin-load-checker.exe .\release
+
+copy %QTDIR%\bin\Qt5Core.dll .\release
+copy %QTDIR%\bin\Qt5Gui.dll .\release
+copy %QTDIR%\bin\Qt5Widgets.dll .\release
+copy %QTDIR%\bin\Qt5Network.dll .\release
+copy %QTDIR%\bin\Qt5Xml.dll .\release
+copy %QTDIR%\bin\Qt5Svg.dll .\release
+copy %QTDIR%\bin\Qt5Test.dll .\release
+copy %QTDIR%\plugins\platforms\qminimal.dll .\release
+copy %QTDIR%\plugins\platforms\qwindows.dll .\release
+copy %QTDIR%\plugins\styles\qwindowsvistastyle.dll .\release
+copy ..\sv-dependency-builds\win64-msvc\lib\libsndfile-1.dll .\release
+
+rem some of these expect to be run from the project root
+cd ..
+build_win64\release\test-svcore-base
+build_win64\release\test-svcore-system
+build_win64\release\test-svcore-data-fileio
+build_win64\release\test-svcore-data-model
+
+set PATH=%ORIGINALPATH%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/build-and-package.bat	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,52 @@
+rem  Run this from within the top-level SV dir: deploy\win64\build-and-package.bat
+
+set STARTPWD=%CD%
+
+if not exist "C:\Program Files (x86)\SMLNJ\bin" (
+@   echo Could not find SML/NJ, required for Repoint
+@   exit /b 2
+)
+
+if not exist "C:\Program Files (x86)\WiX Toolset v3.11\bin" (
+@   echo Could not find WiX Toolset
+@   exit /b 2
+)
+
+@echo Rebuilding 32-bit
+
+cd %STARTPWD%
+del /q /s build_win32
+call .\deploy\win64\build-32.bat
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+@echo Rebuilding 64-bit
+
+cd %STARTPWD%
+del /q /s build_win64
+call .\deploy\win64\build-64.bat
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+set PATH=%PATH%;"C:\Program Files (x86)\WiX Toolset v3.11\bin"
+
+@echo Packaging 32-bit
+
+cd %STARTPWD%\build_win32
+del sonic-visualiser.msi
+candle -v ..\deploy\win32\sonic-visualiser.wxs
+light -b . -ext WixUIExtension -ext WixUtilExtension -v sonic-visualiser.wixobj
+if %errorlevel% neq 0 exit /b %errorlevel%
+del sonic-visualiser.wixobj
+del sonic-visualiser.wixpdb
+
+@echo Packaging 64-bit
+
+cd %STARTPWD%\build_win64
+del sonic-visualiser.msi
+candle -v ..\deploy\win64\sonic-visualiser.wxs
+light -b . -ext WixUIExtension -ext WixUtilExtension -v sonic-visualiser.wixobj
+if %errorlevel% neq 0 exit /b %errorlevel%
+del sonic-visualiser.wixobj
+del sonic-visualiser.wixpdb
+
+@echo Done
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/sonic-visualiser.wxs	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,339 @@
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+
+  <!-- NB this is specific to a particular Qt and compiler version.
+       20th April 2018 - updated for Qt 5.10.1 and MSVC 2017
+   -->
+
+  <Product
+      Name="Sonic Visualiser" 
+      Id="*"
+      Language="1033"
+      Codepage="1252" 
+      Version="3.2"
+      UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0"
+      Manufacturer="Queen Mary, University of London">
+    
+    <Package
+        Id="*"
+        Keywords="Installer"
+        Description="Sonic Visualiser 64-bit Installer" 
+        Comments="Copyright (c) 2018 Queen Mary, University of London and others."
+        Manufacturer="Queen Mary, University of London" 
+        InstallerVersion="200"
+        Languages="1033" 
+        Compressed="yes" 
+        Platform="x64"
+        SummaryCodepage="1252"/>
+
+    <MajorUpgrade DowngradeErrorMessage="A later version of Sonic Visualiser is already installed. Setup will now exit."/>
+
+    <Media Id="1" Cabinet="SonicVisualiser.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1"/>
+    <Property Id="DiskPrompt" Value="Sonic Visualiser Installation [1]"/>
+
+    <Directory Id="TARGETDIR" Name="SourceDir">
+
+      <Directory Id="ProgramFiles64Folder" Name="PFiles64">
+        <Directory Id="VampPlugins" Name="Vamp Plugins">
+          <Component Win64="yes"
+              Id="VampPlugins"
+              Guid="528C7D7E-5A06-4E7D-89BB-7C16431DF82F">
+            <File
+                Id="VampREADME"
+                Name="README.txt"
+                Source="..\deploy\win64\README-Vamp.txt"/>
+          </Component>
+        </Directory>
+
+        <Directory Id="APPLICATIONFOLDER" Name="Sonic Visualiser">
+
+          <Component Win64="yes"
+              Id="MainExecutable"
+              Guid="65E1EBDF-4C8F-47B8-BCD6-981667F5946D">
+
+            <File
+                Id="SVExecutable"
+                Name="Sonic Visualiser.exe"
+                Source="release\Sonic Visualiser.exe"
+                KeyPath="yes">
+
+              <Shortcut
+                  Id="SVStartEntry"
+                  Directory="ProgramMenuDir"
+                  Name="Sonic Visualiser"
+                  WorkingDirectory="APPLICATIONFOLDER"
+                  Icon="winicon.ico"
+                  IconIndex="0"
+                  Advertise="yes"/>
+
+              <Shortcut
+                  Id="SVDesktop"
+                  Directory="DesktopFolder"
+                  Name="Sonic Visualiser"
+                  WorkingDirectory="APPLICATIONFOLDER"
+                  Icon="winicon.ico"
+                  IconIndex="0"
+                  Advertise="yes"/>
+            </File>
+
+            <File
+                Id="COPYING"
+                Name="COPYING.txt"
+                Source="..\COPYING"/>
+            <File
+                Id="README"
+                Name="README.txt"
+                Source="..\README.md"/>
+            <File
+                Id="CHANGELOG"
+                Name="CHANGELOG.txt"
+                Source="..\CHANGELOG"/>
+
+            <File
+                Id="winicon.ico"
+                Name="sv-winicon.ico"
+                Source="..\icons\sv-winicon.ico"/>
+          </Component>
+          
+          <Component Win64="yes"
+	      Id="SVFileAssociation"
+	      Guid="F07C5CC1-0209-4C1A-8D52-C40B50A2B964">
+            
+            <CreateFolder/>
+
+            <ProgId 
+                Id='SonicVisualiser.svfile' 
+                Description='Sonic Visualiser project file'
+                Icon="SVExecutable">
+              <Extension 
+                  Id='sv' 
+                  ContentType='application/sonicvisualiser'>
+                <Verb 
+                    Id='open' 
+                    Command='Open' 
+                    TargetFile='SVExecutable' 
+                    Argument='"%1"' />
+              </Extension>
+            </ProgId>
+            
+          </Component>
+          
+          <Component Win64="yes"
+              Id="Qt5"
+              Guid="5495ED5E-939A-4BE8-9000-D55F2A7A2E90">
+            <File
+                Id="QtCore"
+                Name="Qt5Core.dll"
+                Source="release\Qt5Core.dll"
+		KeyPath="yes"/>
+            <File
+                Id="QtGui"
+                Name="Qt5Gui.dll"
+                Source="release\Qt5Gui.dll"/>
+            <File
+                Id="QtNetwork"
+                Name="Qt5Network.dll"
+                Source="release\Qt5Network.dll"/>
+            <File
+                Id="QtWidgets"
+                Name="Qt5Widgets.dll"
+                Source="release\Qt5Widgets.dll"/>
+            <File
+                Id="QtXml"
+                Name="Qt5Xml.dll"
+                Source="release\Qt5Xml.dll"/>
+            <File
+                Id="QtSvg"
+                Name="Qt5Svg.dll"
+                Source="release\Qt5Svg.dll"/>
+          </Component>
+
+          <Component Win64="yes"
+                     Id="Sndfile"
+                     Guid="04533516-6460-4155-A0D4-E9BA4D31E95C">
+            <File
+                Id="libsndfile"
+                Name="libsndfile-1.dll"
+                Source="..\sv-dependency-builds\win64-msvc\lib\libsndfile-1.dll"
+                KeyPath="yes"/>
+          </Component>
+
+          <Component Win64="yes"
+               Id="VCRuntime"
+               Guid="251D9513-BBD2-47CF-BE78-EF79446F7683">
+
+            <!-- Redistributables are handled by the Visual Studio
+                 installer (a separate program from VS itself) and are
+                 installed into C:\Program Files (x86)\Microsoft
+                 Visual Studio\2017\Community\VC\Redist\MSVC\...  NB
+                 this is not the same thing as the Windows SDKs, which
+                 consist of build tools etc - they have their own
+                 installers and get installed by default to C:\Program
+                 Files (x86)\Windows Kits\... -->
+               
+               <File
+                   Id="concrt140"
+                   Name="concrt140.dll"
+                   Source="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.15.26706\x64\Microsoft.VC141.CRT\concrt140.DLL"
+                   KeyPath="yes"/>
+               <File
+                   Id="msvcp140"
+                   Name="msvcp140.dll"
+                   Source="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.15.26706\x64\Microsoft.VC141.CRT\msvcp140.DLL"/>
+               <File
+                   Id="vccorlib140"
+                   Name="vccorlib140.dll"
+                   Source="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.15.26706\x64\Microsoft.VC141.CRT\vccorlib140.DLL"/>
+               <File
+                   Id="vcruntime140"
+                   Name="vcruntime140.dll"
+                   Source="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.15.26706\x64\Microsoft.VC141.CRT\vcruntime140.DLL"/>
+          </Component>
+
+	  <Directory Id="Platforms" Name="platforms">
+            <Component Win64="yes"
+                Id="Qt5PlatformPlugins"
+                Guid="1FFB773E-6D6D-4C0E-832B-F0FFEA959CA5">
+	      <File
+                  Id="qminimal"
+                  Name="qminimal.dll"
+                  Source="release\qminimal.dll"/>
+	      <File
+                  Id="qwindows"
+                  Name="qwindows.dll"
+                  Source="release\qwindows.dll"/>
+            </Component>
+	  </Directory>
+
+	  <Directory Id="Styles" Name="styles">
+            <Component Win64="yes"
+                Id="Qt5StylePlugins"
+                Guid="7A676FC1-B139-432C-A7D3-F33984934B79">
+	      <File
+                  Id="qwindowsvistastyle"
+                  Name="qwindowsvistastyle.dll"
+                  Source="release\qwindowsvistastyle.dll"/>
+            </Component>
+	  </Directory>
+
+	  <Directory Id="Helpers" Name="helpers">
+            <Component Win64="yes"
+                Id="Piper64"
+                Guid="6385BD86-A5D3-4C77-AD41-B2DCA5B34E48">
+	      <File
+		  Id="piperconv64"
+		  Name="piper-convert.exe"
+		  Source="release\piper-convert.exe"/>
+	      <File
+		  Id="piper64"
+		  Name="piper-vamp-simple-server.exe"
+		  Source="release\piper-vamp-simple-server.exe"/>
+	    </Component>
+            <Component Win64="yes"
+                Id="Piper32"
+                Guid="F27A00A8-DD03-45B0-A13C-8CD8CC6F7386">
+	      <File
+		  Id="piper32"
+		  Name="piper-vamp-simple-server-32.exe"
+		  Source="..\build_win32\release\piper-vamp-simple-server.exe"/>
+	      <File
+                  Id="libgcc32"
+                  Name="libgcc_s_dw2-1.dll"
+                  Source="..\build_win32\release\libgcc_s_dw2-1.dll"/>
+	      <File
+                  Id="libstdcplusplus32"
+                  Name="libstdc++-6.dll"
+                  Source="..\build_win32\release\libstdc++-6.dll"/>
+	      <File
+                  Id="libwinpthread32"
+                  Name="libwinpthread-1.dll"
+                  Source="..\build_win32\release\libwinpthread-1.dll"/>
+	    </Component>
+            <Component Win64="yes"
+                Id="Checker64"
+                Guid="19A400D9-D5B2-4CB5-AF84-7C1DEA11D7B5">
+	      <File
+		  Id="checker64"
+		  Name="vamp-plugin-load-checker.exe"
+		  Source="release\vamp-plugin-load-checker.exe"/>
+	    </Component>
+            <Component Win64="yes"
+                Id="Checker32"
+                Guid="4F3FDFEC-23BD-4F2F-9B8F-9C8387FDEC21">
+	      <File
+		  Id="checker32"
+		  Name="vamp-plugin-load-checker-32.exe"
+		  Source="..\build_win32\release\vamp-plugin-load-checker.exe"/>
+	    </Component>
+	    
+	  </Directory> <!-- helpers -->
+	</Directory> <!-- sv -->
+      </Directory> <!-- pfiles64 -->
+
+      <Directory Id="ProgramFilesFolder" Name="PFiles">
+        <Directory Id="Vamp32Plugins" Name="Vamp Plugins">
+          <Component
+              Id="Vamp32Plugins"
+              Guid="62d23999-63ed-4937-b904-ec8e47a776d1">
+            <File
+                Id="Vamp32README"
+                Name="README.txt"
+                Source="..\deploy\win64\README-Vamp32.txt"/>
+          </Component>
+        </Directory>
+      </Directory>
+
+      <Directory Id="ProgramMenuFolder" Name="Programs">
+        <Directory Id="ProgramMenuDir" Name="Sonic Visualiser">
+          <Component Id="ProgramMenuDir" Guid="C1980FF3-D135-46F8-8542-F937748721E6">
+            <RemoveFolder Id="ProgramMenuDir" On="uninstall"/>
+            <RegistryValue Root="HKMU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes"/>
+          </Component>
+        </Directory>
+      </Directory>
+
+      <Directory Id="DesktopFolder" Name="Desktop"/>
+
+    </Directory>
+
+    <Feature 
+	Id="Complete"
+	Title="Required files"
+	Description="Installs the required files for running Sonic Visualiser."
+	AllowAdvertise="no"
+	Absent="disallow"
+	ConfigurableDirectory="APPLICATIONFOLDER"
+	Level="1">
+      <ComponentRef Id="VampPlugins"/>
+      <ComponentRef Id="MainExecutable"/>
+      <ComponentRef Id="SVFileAssociation"/>
+      <ComponentRef Id="Sndfile"/>
+      <ComponentRef Id="Qt5"/>
+      <ComponentRef Id="VCRuntime"/>
+      <ComponentRef Id="Qt5PlatformPlugins"/>
+      <ComponentRef Id="Qt5StylePlugins"/>
+      <ComponentRef Id="Piper64"/>
+      <ComponentRef Id="Piper32"/>
+      <ComponentRef Id="Checker64"/>
+      <ComponentRef Id="Checker32"/>
+      <ComponentRef Id="Vamp32Plugins"/>
+      <ComponentRef Id="ProgramMenuDir"/>
+    </Feature>
+
+    <UI>
+      <UIRef Id="WixUI_InstallDir" />
+      <UIRef Id="WixUI_ErrorProgressText" />
+    </UI>
+
+    <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />
+    <Property Id="WIXUI_DONTVALIDATEPATH" Value="1" />
+    <Property Id="ApplicationFolderName" Value="Sonic Visualiser" />
+    <Property Id="WixAppFolder" Value="WixPerMachineFolder" />
+    <WixVariable Id="WixUILicenseRtf" Value="..\deploy\win64\License.rtf" />
+    
+    <Icon Id="winicon.ico" SourceFile="..\icons\sv-winicon.ico"/>
+    <Property Id="ARPPRODUCTICON" Value="winicon.ico" />
+
+    <WixVariable Id="WixUIBannerBmp" Value="..\deploy\win32\top.bmp"/>
+    <WixVariable Id="WixUIDialogBmp" Value="..\deploy\win32\main.bmp"/>
+
+  </Product> </Wix>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/win64/store-notes.txt	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,62 @@
+
+Notes on the Desktop Bridge for Windows Store packaging
+=======================================================
+
+* Main page
+
+  https://developer.microsoft.com/en-us/windows/bridges/desktop
+
+* Introductory tutorial
+
+  https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter
+
+* Desktop App Converter is the helper application that does the
+  conversion; Desktop Bridge is, apparently, the technology, which can
+  be used without using the Desktop App Converter. Here's a page about
+  doing the conversion manually:
+
+  https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-manual-conversion
+
+* Note about C++ runtime dependency
+
+  https://support.microsoft.com/en-gb/help/3176696/c-runtime-framework-packages-for-desktop-bridge
+
+  but see also
+
+  https://social.msdn.microsoft.com/Forums/windowsapps/en-US/3f1d9bdd-2fa0-463f-b4f9-02e9bf33ed1a/uwp-desktop-bridge-cant-install-app-even-after-signing-the-certificates-with-signtool?forum=wpdevelop
+
+  "If you submit the app to the store, customers downloading it from the
+  store will automatically also download the framework package.
+
+  "If you want your customers to sideload the app, then yes, they'll
+  first have to install the framework package."
+
+
+Preparation
+-----------
+
+* Set up Desktop App Converter as described in https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter
+* Install VC140 runtime dependency (for developer installation of package) from link at https://blogs.msdn.microsoft.com/vcblog/2016/07/07/using-visual-c-runtime-in-centennial-project/
+* Start PowerShell as administrator
+* cd C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x64
+* Run Add-AppxPackage on the one package in that dir
+
+Invocation
+----------
+
+* Start PowerShell as administrator
+* Run e.g.: DesktopAppConverter.exe -Installer C:\Users\Chris\Documents\sonic-visualiser\deploy\win64\sonic-visualiser.msi -Destination . -PackageName "SonicVisualiser" -Publisher CN="sonicvisualiser.org" -Version 3.0.3.0 -MakeAppx -Sign -Verify -Verbose
+* Locate the self-signed certificate file "auto-generated.cer" in Explorer, double-click, Install Certificate, pick Local Machine and the Trusted People store
+* Double click on SonicVisualiser.appx to install
+
+Command based on actual Store data:
+
+DesktopAppConverter.exe -Installer C:\Users\Chris\Documents\sonic-visualiser\deploy\win64\sonic-visualiser-3.0.3-win64.msi -Destination . -PackageName "27750sonicvisualiser.org.SonicVisualiser" -AppId "SonicVisualiser" -AppDisplayName "Sonic Visualiser" -PackageDisplayName "Sonic Visualiser" -Publisher CN="55F5913E-18B3-470B-9056-D601FF241EB2" -PackagePublisherDisplayName "sonicvisualiser.org" -Version 3.0.3.0 -AppFileTypes "'.sv','.svl','.wav'" -MakeAppx -Sign -Verify -Verbose
+
+NB the last digit (revision) of the version number must be 0 for store
+submission.
+
+Can't submit Desktop Bridge apps through just any store account -- it
+has to be approved first via form at
+https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge
+-- still waiting for this.
Binary file i18n/sonic-visualiser_cs_CZ.qm has changed
--- a/i18n/sonic-visualiser_cs_CZ.ts	Mon Sep 17 13:53:25 2018 +0100
+++ b/i18n/sonic-visualiser_cs_CZ.ts	Mon Sep 17 14:05:41 2018 +0100
@@ -38,6 +38,13 @@
     </message>
 </context>
 <context>
+    <name>AlignmentView</name>
+    <message>
+        <source>AlignmentView</source>
+        <translation>Pohled na zarovnání</translation>
+    </message>
+</context>
+<context>
     <name>AudioCallbackPlaySource</name>
     <message>
         <source>Stop at %1</source>
@@ -53,6 +60,17 @@
     </message>
 </context>
 <context>
+    <name>AudioCallbackRecordTarget</name>
+    <message>
+        <source>recorded-%1.wav</source>
+        <translation>nahráno-%1.wav</translation>
+    </message>
+    <message>
+        <source>Recorded %1</source>
+        <translation>Nahráno %1</translation>
+    </message>
+</context>
+<context>
     <name>AudioDial</name>
     <message>
         <source>%2%3</source>
@@ -82,6 +100,10 @@
         <source>New value for %1, from %2 to %3 %4:</source>
         <translation>Nová hodnota pro %1, od %2 do %3 %4:</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <translation>%1: %2</translation>
+    </message>
 </context>
 <context>
     <name>AudioTargetFactory</name>
@@ -164,6 +186,14 @@
         <source>Failed to open file for reading</source>
         <translation>Otevření souboru pro čtení se nezdařilo</translation>
     </message>
+    <message>
+        <source>Failed to open file handle for writing</source>
+        <translation>Otevření manipulátoru souboru pro zápis se nezdařilo</translation>
+    </message>
+    <message>
+        <source>Failed to open file handle for reading</source>
+        <translation>Otevření manipulátoru souboru pro čtení se nezdařilo</translation>
+    </message>
 </context>
 <context>
     <name>BundleCommand</name>
@@ -255,11 +285,11 @@
     </message>
     <message>
         <source>Pitch</source>
-        <translation type="unfinished">Výška tónu</translation>
+        <translation>Výška tónu</translation>
     </message>
     <message>
         <source>Explicitly, in milliseconds</source>
-        <translation type="unfinished"></translation>
+        <translation>Otevřeně, v milisekundách</translation>
     </message>
 </context>
 <context>
@@ -294,11 +324,11 @@
     </message>
     <message>
         <source>Normalize Columns</source>
-        <translation>Normalizovat sloupce</translation>
+        <translation type="vanished">Normalizovat sloupce</translation>
     </message>
     <message>
         <source>Normalize Visible Area</source>
-        <translation>Normalizovat viditelnou oblast</translation>
+        <translation type="vanished">Normalizovat viditelnou oblast</translation>
     </message>
     <message>
         <source>Colour</source>
@@ -336,12 +366,51 @@
         <source>Invert Vertical Scale</source>
         <translation>Obrátit svislou stupnici</translation>
     </message>
+    <message>
+        <source>Normalization</source>
+        <translation>Normalizace</translation>
+    </message>
+    <message>
+        <source>None</source>
+        <translation>Žádný</translation>
+    </message>
+    <message>
+        <source>Col</source>
+        <translation>Barva</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>Pohled</translation>
+    </message>
+    <message>
+        <source>Hybrid</source>
+        <translation>Smíšený</translation>
+    </message>
+</context>
+<context>
+    <name>ColourComboBox</name>
+    <message>
+        <source>Name New Colour</source>
+        <translation>Pojmenovat novou barvu</translation>
+    </message>
+    <message>
+        <source>Enter a name for the new colour:</source>
+        <translation>Zadejte název pro novou barvu:</translation>
+    </message>
+    <message>
+        <source>Prefer black background for this colour</source>
+        <translation>Upřednostňovat černé pozadí pro tuto barvu</translation>
+    </message>
+    <message>
+        <source>Add New Colour...</source>
+        <translation>Přidat novou barvu...</translation>
+    </message>
 </context>
 <context>
     <name>ColourMapper</name>
     <message>
         <source>Black on White</source>
-        <translation>Černá na bílé</translation>
+        <translation type="vanished">Černá na bílé</translation>
     </message>
     <message>
         <source>Yellow on Black</source>
@@ -349,19 +418,19 @@
     </message>
     <message>
         <source>Banded</source>
-        <translation>Pruhovaný</translation>
+        <translation type="vanished">Pruhovaný</translation>
     </message>
     <message>
         <source>&lt;unknown&gt;</source>
-        <translation>&lt;neznámý&gt;</translation>
+        <translation type="vanished">&lt;neznámý&gt;</translation>
     </message>
     <message>
         <source>Sunset</source>
-        <translation>Západ slunce</translation>
+        <translation type="vanished">Západ slunce</translation>
     </message>
     <message>
         <source>Fruit Salad</source>
-        <translation>Ovocný salát</translation>
+        <translation type="vanished">Ovocný salát</translation>
     </message>
     <message>
         <source>Red on Blue</source>
@@ -369,7 +438,7 @@
     </message>
     <message>
         <source>Printer</source>
-        <translation>Tiskárna</translation>
+        <translation type="vanished">Tiskárna</translation>
     </message>
     <message>
         <source>Blue on Black</source>
@@ -381,31 +450,19 @@
     </message>
     <message>
         <source>High Gain</source>
-        <translation>Zesílení výšek</translation>
+        <translation type="vanished">Zesílení výšek</translation>
     </message>
     <message>
         <source>Highlight</source>
-        <translation>Zvýraznění</translation>
+        <translation type="vanished">Zvýraznění</translation>
     </message>
     <message>
         <source>White on Black</source>
-        <translation>Bílá na černé</translation>
+        <translation type="vanished">Bílá na černé</translation>
     </message>
     <message>
         <source>Green</source>
-        <translation type="unfinished">Zelená</translation>
-    </message>
-    <message>
-        <source>Cherry</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Wasp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ice</source>
-        <translation type="unfinished"></translation>
+        <translation type="obsolete">Zelená</translation>
     </message>
 </context>
 <context>
@@ -470,7 +527,7 @@
     <name>DecodingWavFileReader</name>
     <message>
         <source>Decoding %1...</source>
-        <translation type="unfinished">Dekóduje se %1...</translation>
+        <translation>Dekóduje se %1...</translation>
     </message>
 </context>
 <context>
@@ -590,7 +647,7 @@
     </message>
     <message>
         <source>Transforms supplied to a single FeatureExtractionModelTransformer instance must be similar in every respect except plugin output</source>
-        <translation type="unfinished"></translation>
+        <translation>Proměny poskytnuté jedné instanci FeatureExtractionModelTransformer musí být podobné v každém ohledu vyjma výstupu přídavného modulu</translation>
     </message>
 </context>
 <context>
@@ -636,62 +693,62 @@
     <name>FlexiNoteLayer</name>
     <message>
         <source>New Point</source>
-        <translation type="unfinished">Nový bod</translation>
+        <translation>Nový bod</translation>
     </message>
     <message>
         <source>Vertical Scale</source>
-        <translation type="unfinished">Svislá stupnice</translation>
+        <translation>Svislá stupnice</translation>
     </message>
     <message>
         <source>Scale Units</source>
-        <translation type="unfinished">Jednotky stupnice</translation>
+        <translation>Jednotky stupnice</translation>
     </message>
     <message>
         <source>Scale</source>
-        <translation type="unfinished">Stupnice</translation>
+        <translation>Stupnice</translation>
     </message>
     <message>
         <source>Auto-Align</source>
-        <translation type="unfinished">Automatické zarovnání</translation>
+        <translation>Automatické zarovnání</translation>
     </message>
     <message>
         <source>Linear</source>
-        <translation type="unfinished"></translation>
+        <translation>Lineární</translation>
     </message>
     <message>
         <source>Log</source>
-        <translation type="unfinished">Zápis</translation>
+        <translation>Záznam</translation>
     </message>
     <message>
         <source>MIDI Notes</source>
-        <translation type="unfinished">Noty MIDI</translation>
+        <translation>Noty MIDI</translation>
     </message>
     <message>
         <source>In progress</source>
-        <translation type="unfinished">Probíhá</translation>
+        <translation>Probíhá</translation>
     </message>
     <message>
         <source>No local points</source>
-        <translation type="unfinished">Žádné místní body</translation>
+        <translation>Žádné místní body</translation>
     </message>
     <message>
         <source>%1 (%2, %3 Hz)</source>
-        <translation type="unfinished">%1 (%2, %3 Hz)</translation>
+        <translation>%1 (%2, %3 Hz)</translation>
     </message>
     <message>
         <source>%1 Hz (%2, %3)</source>
-        <translation type="unfinished">%1 Hz (%2, %3)</translation>
+        <translation>%1 Hz (%2, %3)</translation>
     </message>
     <message>
         <source>%1 %2</source>
-        <translation type="unfinished">%1 %2</translation>
+        <translation>%1 %2</translation>
     </message>
     <message>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
 No label</source>
-        <translation type="unfinished">Čas:	%1
+        <translation>Čas:	%1
 Výška:	%2
 Doba trvání:	%3
 Žádný štítek</translation>
@@ -701,113 +758,113 @@
 Pitch:	%2
 Duration:	%3
 Label:	%4</source>
-        <translation type="unfinished">Čas:	%1
+        <translation>Čas:	%1
 Výška:	%2
 Doba trvání:	%3
 Štítek:	%4</translation>
     </message>
     <message>
         <source>Draw Point</source>
-        <translation type="unfinished">Nakreslit bod</translation>
+        <translation>Nakreslit bod</translation>
     </message>
     <message>
         <source>Erase Point</source>
-        <translation type="unfinished">Vymazat bod</translation>
+        <translation>Vymazat bod</translation>
     </message>
     <message>
         <source>Drag Point</source>
-        <translation type="unfinished"></translation>
+        <translation>Táhnout bod</translation>
     </message>
     <message>
         <source>Edit Point</source>
-        <translation type="unfinished">Upravit bod</translation>
+        <translation>Upravit bod</translation>
     </message>
     <message>
         <source>Relocate Point</source>
-        <translation type="unfinished">Přemístit bod</translation>
+        <translation>Přemístit bod</translation>
     </message>
     <message>
         <source>Change Point Value</source>
-        <translation type="unfinished">Změnit hodnotu bodu</translation>
+        <translation>Změnit hodnotu bodu</translation>
     </message>
     <message>
         <source>Add Point</source>
-        <translation type="unfinished">Přidat bod</translation>
+        <translation>Přidat bod</translation>
     </message>
     <message>
         <source>Snap Notes</source>
-        <translation type="unfinished"></translation>
+        <translation>Přichytit poznámky</translation>
     </message>
     <message>
         <source>Merge Notes</source>
-        <translation type="unfinished"></translation>
+        <translation>Sloučit poznámky</translation>
     </message>
     <message>
         <source>Drag Selection</source>
-        <translation type="unfinished">Táhnout výběr</translation>
+        <translation>Táhnout výběr</translation>
     </message>
     <message>
         <source>Resize Selection</source>
-        <translation type="unfinished">Změnit velikost výběru</translation>
+        <translation>Změnit velikost výběru</translation>
     </message>
     <message>
         <source>Delete Selected Points</source>
-        <translation type="unfinished">Smazat vybrané body</translation>
+        <translation>Smazat vybrané body</translation>
     </message>
     <message>
         <source>Re-align pasted items?</source>
-        <translation type="unfinished">Zarovnat vložené položky znovu?</translation>
+        <translation>Zarovnat vložené položky znovu?</translation>
     </message>
     <message>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
-        <translation type="unfinished">Položky, které vkládáte, přišly z vrstvy s odlišným zdrojovým materiálem, než má tento. Chcete je zarovnat znovu v čase, aby se hodily ke zdrojovému materiálu pro tuto vrstvu?</translation>
+        <translation>Položky, které vkládáte, přišly z vrstvy s odlišným zdrojovým materiálem, než má tento. Chcete je zarovnat znovu v čase, aby se hodily ke zdrojovému materiálu pro tuto vrstvu?</translation>
     </message>
     <message>
         <source>Paste</source>
-        <translation type="unfinished">Vložit</translation>
+        <translation>Vložit</translation>
     </message>
     <message>
         <source>Record FlexiNote</source>
-        <translation type="unfinished"></translation>
+        <translation>Nahrát FlexiNote</translation>
     </message>
 </context>
 <context>
     <name>FlexiNoteModel</name>
     <message>
         <source>FlexiNote</source>
-        <translation type="unfinished"></translation>
+        <translation>FlexiNote</translation>
     </message>
     <message>
         <source>Time</source>
-        <translation type="unfinished">Čas</translation>
+        <translation>Čas</translation>
     </message>
     <message>
         <source>Frame</source>
-        <translation type="unfinished"></translation>
+        <translation>Snímek</translation>
     </message>
     <message>
         <source>Pitch</source>
-        <translation type="unfinished">Výška tónu</translation>
+        <translation>Výška tónu</translation>
     </message>
     <message>
         <source>Duration</source>
-        <translation type="unfinished">Doba trvání</translation>
+        <translation>Doba trvání</translation>
     </message>
     <message>
         <source>Level</source>
-        <translation type="unfinished">Úroveň</translation>
+        <translation>Úroveň</translation>
     </message>
     <message>
         <source>Label</source>
-        <translation type="unfinished">Štítek</translation>
+        <translation>Štítek</translation>
     </message>
     <message>
         <source>Unknown</source>
-        <translation type="unfinished">Neznámý</translation>
+        <translation>Neznámý</translation>
     </message>
     <message>
         <source>Edit Data</source>
-        <translation type="unfinished">Upravit data</translation>
+        <translation>Upravit data</translation>
     </message>
 </context>
 <context>
@@ -1178,7 +1235,9 @@
         <source>%1 session files (*.%1)
 RDF files (%3)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 soubory sezení (*.%1)
+Soubory RDF (%3)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>All supported files (%1 %2)
@@ -1189,7 +1248,14 @@
 MIDI files (*.mid)
 Text files (*.txt)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Všechny podporované soubory (%1 %2)
+Čárkou oddělené datové soubory (*.csv)
+Soubory XML Sonic Visualiser Layer (*.svl)
+Mezerou oddělené soubory .lab (*.lab)
+Soubory RDF (%2)
+Soubory MIDI (*.mid)
+Textové soubory (*.txt)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>All supported files (%1 %2)
@@ -1199,7 +1265,13 @@
 RDF files (%2)
 Text files (*.txt)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Všechny podporované soubory (%1 %2)
+Čárkou oddělené datové soubory (*.csv)
+Soubory XML Sonic Visualiser Layer (*.svl)
+Mezerou oddělené soubory .lab (*.lab)
+Soubory RDF (%2)
+Textové soubory (*.txt)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>All supported files (*.sv %1 %2)
@@ -1207,14 +1279,21 @@
 Audio files (%2)
 RDF files (%1)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Všechny podporované soubory (*.sv %1 %2)
+%3 soubory sezení (*.%4)
+Zvukové soubory (%2)
+Soubory RDF (%1)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>Comma-separated data files (*.csv)
 Space-separated .lab files (*.lab)
 Text files (*.txt)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Čárkou oddělené datové soubory (*.csv)
+Mezerou oddělené soubory .lab (*.lab)
+Textové soubory (*.txt)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>All supported files (*.sv %1 %2 %3)
@@ -1223,12 +1302,18 @@
 Layer files (%2)
 RDF files (%3)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Všechny podporované soubory (*.sv %1 %2 %3)
+%4 soubory sezení (*.%5)
+Zvukové soubory (%1)
+Soubory vrstev (%2)
+Soubory RDF (%3)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>%1 session files (*.%2)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 soubory sezení (*.%2)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>Comma-separated data files (*.csv)
@@ -1237,7 +1322,12 @@
 MIDI files (*.mid)
 Text files (*.txt)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Čárkou oddělené datové soubory (*.csv)
+Soubory XML Sonic Visualiser Layer (*.svl)
+Soubory RDF/Turtle (%1)
+Soubory MIDI (*.mid)
+Textové soubory (*.txt)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>Comma-separated data files (*.csv)
@@ -1245,13 +1335,25 @@
 RDF/Turtle files (%1)
 Text files (*.txt)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Čárkou oddělené datové soubory (*.csv)
+Soubory XML Sonic Visualiser Layer (*.svl)
+Soubory RDF/Turtle (%1)
+Textové soubory (*.txt)
+Všechny soubory (*.*)</translation>
     </message>
     <message>
         <source>Comma-separated data files (*.csv)
 Text files (*.txt)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Čárkou oddělené datové soubory (*.csv)
+Textové soubory (*.txt)
+Všechny soubory (*.*)</translation>
+    </message>
+    <message>
+        <source>Scalable Vector Graphics files (*.svg)
+All files (*.*)</source>
+        <translation>Soubory SVG (Scalable Vector Graphics) (*.svg)
+Všechny soubory (*.*)</translation>
     </message>
 </context>
 <context>
@@ -1325,7 +1427,7 @@
     </message>
     <message>
         <source>%1: Key and Mouse Reference</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: Klávesové zkratky a myš</translation>
     </message>
 </context>
 <context>
@@ -1405,6 +1507,14 @@
         <source>Cyclical counter</source>
         <translation>Cyklické počítadlo</translation>
     </message>
+    <message>
+        <source>Subdivide Points</source>
+        <translation>Rozdělit body na menší části</translation>
+    </message>
+    <message>
+        <source>Winnow Points</source>
+        <translation>Protřídit body</translation>
+    </message>
 </context>
 <context>
     <name>Layer</name>
@@ -1470,11 +1580,11 @@
     </message>
     <message>
         <source>Flexible Notes</source>
-        <translation type="unfinished"></translation>
+        <translation>Pružné poznámky</translation>
     </message>
     <message>
         <source>Unknown Layer</source>
-        <translation type="unfinished"></translation>
+        <translation>Neznámá vrstva</translation>
     </message>
 </context>
 <context>
@@ -1512,6 +1622,20 @@
     </message>
 </context>
 <context>
+    <name>LevelPanToolButton</name>
+    <message>
+        <source>Click to adjust level and pan</source>
+        <translation>Klepněte pro přizpůsobení úrovně a vyvážení</translation>
+    </message>
+</context>
+<context>
+    <name>LevelPanWidget</name>
+    <message>
+        <source>Drag vertically to adjust level, horizontally to adjust pan</source>
+        <translation>Táhněte svisle pro přizpůsobení úrovně, vodorovného pro přizpůsobení vyvážení</translation>
+    </message>
+</context>
+<context>
     <name>MIDIFileImportDialog</name>
     <message>
         <source>&lt;b&gt;Select track to import&lt;/b&gt;&lt;p&gt;You can only import this file as a single annotation layer, but the file contains more than one track, or notes on more than one channel.&lt;p&gt;Please select the track or merged tracks you wish to import:</source>
@@ -1895,7 +2019,8 @@
     </message>
     <message>
         <source>Space</source>
-        <translation>Mezerník</translation>
+        <extracomment>This text is a shortcut label referring to the space-bar on the keyboard. It probably should not be translated, and certainly should not be translated as if referring to an empty void or to the extra-terrestrial universe.</extracomment>
+        <translation></translation>
     </message>
     <message>
         <source>Add a new layer showing a waveform view</source>
@@ -1907,7 +2032,7 @@
     </message>
     <message>
         <source>With </source>
-        <translation>S</translation>
+        <translation type="vanished">S</translation>
     </message>
     <message>
         <source>Scroll the current pane to the left without moving the playback cursor or other panes</source>
@@ -2087,7 +2212,7 @@
     </message>
     <message>
         <source>&lt;br&gt;With Rubber Band &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;Gumička (Rubber Band) &amp;copy; Chris Cannam</translation>
+        <translation type="vanished">&lt;br&gt;Gumička (Rubber Band) &amp;copy; Chris Cannam</translation>
     </message>
     <message>
         <source>Erase items from layer</source>
@@ -2123,7 +2248,7 @@
     </message>
     <message>
         <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment using transform &quot;%1&quot;:&lt;p&gt;%2</source>
-        <translation>&lt;b&gt;Spočítání zarovnání se nezdařilo&lt;/b&gt;&lt;p&gt;Zarovnání zvuku se spočítat s pomocí &quot;%1&quot; nepodařilo:&lt;p&gt;%2</translation>
+        <translation type="vanished">&lt;b&gt;Spočítání zarovnání se nezdařilo&lt;/b&gt;&lt;p&gt;Zarovnání zvuku se spočítat s pomocí &quot;%1&quot; nepodařilo:&lt;p&gt;%2</translation>
     </message>
     <message>
         <source>Show Acti&amp;vity Log</source>
@@ -2383,7 +2508,7 @@
     </message>
     <message>
         <source>Adjust the master playback level</source>
-        <translation>Přizpůsobit hlavní úroveň přehrávání</translation>
+        <translation type="vanished">Přizpůsobit hlavní úroveň přehrávání</translation>
     </message>
     <message>
         <source>&lt;p&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;br&gt;&lt;a href=&quot;http://www.sonicvisualiser.org/&quot;&gt;http://www.sonicvisualiser.org/&lt;/a&gt;&lt;/p&gt;</source>
@@ -2479,7 +2604,7 @@
     </message>
     <message>
         <source>&lt;br&gt;With Rubber Band v%1 &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;Gumička (Rubber Band) v%1 &amp;copy; Chris Cannam</translation>
+        <translation type="vanished">&lt;br&gt;Gumička (Rubber Band) v%1 &amp;copy; Chris Cannam</translation>
     </message>
     <message>
         <source>Show centre indicator, frame times and scale</source>
@@ -2491,7 +2616,7 @@
     </message>
     <message>
         <source>Using </source>
-        <translation> </translation>
+        <translation type="vanished"> </translation>
     </message>
     <message>
         <source>Find a Transform...</source>
@@ -2647,7 +2772,7 @@
     </message>
     <message>
         <source>With Qt v%1 &amp;copy; Nokia Corporation</source>
-        <translation>S Qt v%1 &amp;copy; Nokia Corporation</translation>
+        <translation type="vanished">S Qt v%1 &amp;copy; Nokia Corporation</translation>
     </message>
     <message>
         <source>Add a new layer showing a time ruler</source>
@@ -2699,7 +2824,7 @@
     </message>
     <message>
         <source>About Sonic Visualiser</source>
-        <translation>O programu Sonic Visualiser</translation>
+        <translation type="vanished">O programu Sonic Visualiser</translation>
     </message>
     <message>
         <source>Restore non-time-stretched playback</source>
@@ -2763,7 +2888,7 @@
     </message>
     <message>
         <source>Navigate</source>
-        <translation>Navádět</translation>
+        <translation>Navedení</translation>
     </message>
     <message>
         <source>Import an extra audio file into a new pane</source>
@@ -2919,7 +3044,7 @@
     </message>
     <message>
         <source>Ctrl+Shift+Enter</source>
-        <translation type="vanished">Ctrl+Shift+Enter</translation>
+        <translation>Ctrl+Shift+Enter</translation>
     </message>
     <message>
         <source>Audio processing overload</source>
@@ -3339,7 +3464,7 @@
     </message>
     <message>
         <source>&lt;p&gt;&lt;small&gt;%1 : %2 configuration&lt;/small&gt;&lt;/p&gt;</source>
-        <translation>&lt;p&gt;&lt;small&gt;%1 : %2 nastavení&lt;/small&gt;&lt;/p&gt;</translation>
+        <translation type="vanished">&lt;p&gt;&lt;small&gt;%1 : %2 nastavení&lt;/small&gt;&lt;/p&gt;</translation>
     </message>
     <message>
         <source>&lt;b&gt;Template file exists&lt;/b&gt;&lt;p&gt;The template &quot;%1&quot; already exists.&lt;br&gt;Overwrite it?</source>
@@ -3407,7 +3532,7 @@
     </message>
     <message>
         <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;Podpora pro přídavné moduly Vamp (API v%1, host SDK v%2) &amp;copy; Chris Cannam</translation>
+        <translation type="vanished">&lt;br&gt;Podpora pro přídavné moduly Vamp (API v%1, host SDK v%2) &amp;copy; Chris Cannam</translation>
     </message>
     <message>
         <source>Unclassified</source>
@@ -3575,7 +3700,7 @@
     </message>
     <message>
         <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;Knihovna Dataquay Qt/RDF &amp;copy; Chris Cannam</translation>
+        <translation type="vanished">&lt;br&gt;Knihovna Dataquay Qt/RDF &amp;copy; Chris Cannam</translation>
     </message>
     <message>
         <source>Export audio from selection into a data file</source>
@@ -3591,220 +3716,380 @@
     </message>
     <message>
         <source>Playback Speed</source>
+        <translation>Rychlost přehrávání</translation>
+    </message>
+    <message>
+        <source>Export Audio Data...</source>
+        <translation>Vyvést zvuková data...</translation>
+    </message>
+    <message>
+        <source>Export Annotation La&amp;yer...</source>
+        <translation>Vyvést poznámkovou &amp;vrstvu...</translation>
+    </message>
+    <message>
+        <source>Ctrl+Y</source>
+        <translation>Ctrl+Y</translation>
+    </message>
+    <message>
+        <source>Browse Recorded Audio Folder</source>
+        <translation>Procházet složku s nahraným zvukem</translation>
+    </message>
+    <message>
+        <source>Open the Recorded Audio folder in the system file browser</source>
+        <translation>Otevřít složku s nahraným zvukem v systémovém prohlížeči souborů</translation>
+    </message>
+    <message>
+        <source>Ctrl+Shift+Return</source>
+        <translation>Ctrl+Shift+Enter</translation>
+    </message>
+    <message>
+        <source>Show &amp;Unit Converter</source>
+        <translation>Ukázat převodník &amp;jednotek</translation>
+    </message>
+    <message>
+        <source>Open a window of pitch and timing conversion utilities</source>
+        <translation>Otevřít okno s nástroji na převádění výšek tónů a časování</translation>
+    </message>
+    <message>
+        <source>Switch to Previous Layer</source>
+        <translation>Přepnout na předchozí vrstvu</translation>
+    </message>
+    <message>
+        <source>{</source>
+        <translation>{</translation>
+    </message>
+    <message>
+        <source>Make the previous layer in the pane current</source>
+        <translation>Udělat předchozí vrstvu v tabulce nynější</translation>
+    </message>
+    <message>
+        <source>Switch to Next Layer</source>
+        <translation>Přepnout na další vrstvu</translation>
+    </message>
+    <message>
+        <source>}</source>
+        <translation>}</translation>
+    </message>
+    <message>
+        <source>Make the next layer in the pane current</source>
+        <translation>Udělat další vrstvu v tabulce nynější</translation>
+    </message>
+    <message>
+        <source>Record</source>
+        <translation>Nahrát</translation>
+    </message>
+    <message>
+        <source>Ctrl+Space</source>
+        <translation>Ctrl+Mezerník</translation>
+    </message>
+    <message>
+        <source>Record a new audio file</source>
+        <translation>Nahrát nový zvukový soubor</translation>
+    </message>
+    <message>
+        <source>Navigate Tool Mouse Actions</source>
+        <translation>Činnosti nástroje pro navedení prováděné myší</translation>
+    </message>
+    <message>
+        <source>Click left button and drag to move around</source>
+        <translation>Klepněte levým tlačítkem a táhněte pro přesouvání</translation>
+    </message>
+    <message>
+        <source>Zoom to Area</source>
+        <translation>Přiblížit oblast</translation>
+    </message>
+    <message>
+        <source>Shift-click left button and drag to zoom to a rectangular area</source>
+        <translation>Shift a klepněte levým tlačítkem a táhněte pro přiblížení obdélníkové oblasti</translation>
+    </message>
+    <message>
+        <source>Relocate</source>
+        <translation>Přemístit</translation>
+    </message>
+    <message>
+        <source>Double-Click Left</source>
+        <translation>Dvakrát klepněte levým</translation>
+    </message>
+    <message>
+        <source>Double-click left button to jump to clicked location</source>
+        <translation>Dvakrát klepněte levým tlačítkem pro skok na klepnuté místo</translation>
+    </message>
+    <message>
+        <source>Double-click left button on an item to edit it</source>
+        <translation>Dvakrát klepněte levým tlačítkem na položce pro její upravení</translation>
+    </message>
+    <message>
+        <source>Select Tool Mouse Actions</source>
+        <translation>Činnosti nástroje výběru prováděné myší</translation>
+    </message>
+    <message>
+        <source>Click left button and drag to select region; drag region edge to resize</source>
+        <translation>Klepněte levým tlačítkem a táhněte pro výběr oblasti; táhněte za okraj oblasti pro změnu její velikosti</translation>
+    </message>
+    <message>
+        <source>Multi Select</source>
+        <translation>Vícenásobný výběr</translation>
+    </message>
+    <message>
+        <source>Cmd-click left button and drag to select an additional region</source>
+        <translation>Ctrl a klepněte levým tlačítkem a táhněte pro výběr další oblasti</translation>
+    </message>
+    <message>
+        <source>Ctrl-click left button and drag to select an additional region</source>
+        <translation>Ctrl a klepněte levým tlačítkem a táhněte pro výběr další oblasti</translation>
+    </message>
+    <message>
+        <source>Fine Select</source>
+        <translation>Citlivý výběr</translation>
+    </message>
+    <message>
+        <source>Shift-click left button and drag to select without snapping to items or grid</source>
+        <translation>Shift a klepněte levým tlačítkem a táhněte pro výběr bez přichytávání k položkám nebo mřížce</translation>
+    </message>
+    <message>
+        <source>Edit Tool Mouse Actions</source>
+        <translation>Činnosti nástroje úprav prováděné myší</translation>
+    </message>
+    <message>
+        <source>Move</source>
+        <translation>Posunout</translation>
+    </message>
+    <message>
+        <source>Click left button on an item or selected region and drag to move</source>
+        <translation>Klepněte levým tlačítkem na položku nebo vybranou oblast a táhněte pro její přesun</translation>
+    </message>
+    <message>
+        <source>Draw Tool Mouse Actions</source>
+        <translation>Činnosti nástroje kreslení prováděné myší</translation>
+    </message>
+    <message>
+        <source>Click left button and drag to create new item</source>
+        <translation>Klepněte levým tlačítkem a táhněte pro vytvoření nové položky</translation>
+    </message>
+    <message>
+        <source>Erase Tool Mouse Actions</source>
+        <translation>Činnosti nástroje vymazání prováděné myší</translation>
+    </message>
+    <message>
+        <source>Click left button on an item to remove it from the layer</source>
+        <translation>Klepněte levým tlačítkem na položku pro její odstranění z vrstvy</translation>
+    </message>
+    <message>
+        <source>Measure Tool Mouse Actions</source>
+        <translation>Činnosti nástroje měření prováděné myší</translation>
+    </message>
+    <message>
+        <source>Measure Area</source>
+        <translation>Oblast měření</translation>
+    </message>
+    <message>
+        <source>Click left button and drag to measure a rectangular area</source>
+        <translation>Klepněte levým tlačítkem a táhněte pro změření obdélníkové oblasti</translation>
+    </message>
+    <message>
+        <source>Measure Item</source>
+        <translation>Položka měření</translation>
+    </message>
+    <message>
+        <source>Click left button and drag to measure extents of an item or shape</source>
+        <translation>Klepněte levým tlačítkem a táhněte pro změření rozsahu položky nebo tvaru</translation>
+    </message>
+    <message>
+        <source>1. %2</source>
+        <translation>1. %2</translation>
+    </message>
+    <message>
+        <source>%1. %2</source>
+        <translation>%1: %2</translation>
+    </message>
+    <message>
+        <source>Multiplex all of the above</source>
+        <translation>Vícenásobně vše z výše</translation>
+    </message>
+    <message>
+        <source>Playback speed: %1% (%2x slower)</source>
+        <translation>Rychlost přehrávání: %1% (%2x pomalejši)</translation>
+    </message>
+    <message>
+        <source>Playback speed: %1% (%2x faster)</source>
+        <translation>Rychlost přehrávání: %1% (%2x rychlejší)</translation>
+    </message>
+    <message>
+        <source>Problems loading plugins</source>
+        <translation>Potíže při nahrávání přídavných modulů</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
+        <translation>&lt;b&gt;Vytvoření vrstvy se nezdařilo&lt;/b&gt;&lt;p&gt;Nepodařilo se vytvořit odvozenou vrstvu.&lt;p&gt;Proměna vrstvy &quot;%1&quot; se nezdařila:&lt;p&gt;%2</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
+        <translation>&lt;b&gt;Vytvoření vrstvy se nezdařilo&lt;/b&gt;&lt;p&gt;Nepodařilo se vytvořit odvozenou vrstvu.&lt;p&gt;Proměna vrstvy &quot;%1&quot; se nezdařila.&lt;p&gt;Nejsou dostupné žádné informace o chybě.</translation>
+    </message>
+    <message>
+        <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation>&lt;h3&gt;Je dostupná novější verze&lt;/h3&gt;&lt;p&gt;Používáte verzi %1 programu Sonic Visualiser, ale nyní je dostupná verze %2.&lt;/p&gt;&lt;p&gt;Podívejte se, prosím, na stránky &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;projektu Sonic Visualiser&lt;/a&gt;, abyste získal více informací.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>Export SVG File...</source>
+        <translation>Vyvést do souboru SVG...</translation>
+    </message>
+    <message>
+        <source>Export a single pane to a scalable SVG image file</source>
+        <translation>Vyvést jednu tabulku do škálovatelného obrázkového souboru SVG</translation>
+    </message>
+    <message>
+        <source>Subdivide Selected Instants...</source>
+        <translation>Rozdělit vybrané okamžiky na menší části...</translation>
+    </message>
+    <message>
+        <source>Add new instants at regular intervals between the selected instants</source>
+        <translation>Přidat nové okamžiky v pravidelných odstupech mezi vybranými okamžiky</translation>
+    </message>
+    <message>
+        <source>Winnow Selected Instants...</source>
+        <translation>Protřídit vybrané okamžiky...</translation>
+    </message>
+    <message>
+        <source>Remove subdivisions, leaving only every Nth instant</source>
+        <translation>Odstranit rozdělení na menší části, ponechaje jen každý n-tý okamžik</translation>
+    </message>
+    <message>
+        <source>Export the whole pane</source>
+        <translation>Vyvést celou tabulku</translation>
+    </message>
+    <message>
+        <source>Export the visible area only</source>
+        <translation>Vyvést pouze viditelnou oblast</translation>
+    </message>
+    <message>
+        <source>Which region of the current pane do you want to export as a scalable SVG image?</source>
+        <translation>Kterou oblast nynější tabulky chcete vyvést jako škálovatelný obrázek SVG?</translation>
+    </message>
+    <message>
+        <source>Failed to save SVG file</source>
+        <translation>Soubor SVG se nepodařilo uložit</translation>
+    </message>
+    <message>
+        <source>Failed to save SVG file %1</source>
+        <translation>Nepodařilo se uložit soubor SVG %1</translation>
+    </message>
+    <message>
+        <source>Subdivide instants</source>
+        <translation>Rozdělit okamžiky na menší části</translation>
+    </message>
+    <message>
+        <source>Number of subdivisions:</source>
+        <translation>Počet rozdělení na menší části:</translation>
+    </message>
+    <message>
+        <source>Winnow instants</source>
+        <translation>Protřídit body</translation>
+    </message>
+    <message>
+        <source>Remove all instants apart from multiples of:</source>
+        <translation>Odstranit všechny okamžiky kromě násobků:</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment:&lt;p&gt;%1</source>
+        <translation>&lt;b&gt;Spočítání zarovnání se nezdařilo&lt;/b&gt;&lt;p&gt;Nepodařilo se spočítat zarovnání zvuku&lt;p&gt;%1</translation>
+    </message>
+    <message>
+        <source>Adjust the master playback level and pan</source>
+        <translation>Přizpůsobit hlavní úroveň přehrávání a vyvážení</translation>
+    </message>
+    <message>
+        <source>With Qt v%1 &amp;copy; The Qt Company</source>
+        <translation>Qt verze %1 &amp;copy; společnost Qt</translation>
+    </message>
+    <message>
+        <source>&lt;br&gt;With Rubber Band Library v%1 &amp;copy; Particular Programs Ltd</source>
+        <translation>&lt;br&gt;Knihovna Rubber Band verze %1 &amp;copy; Particular Programs Ltd</translation>
+    </message>
+    <message>
+        <source>&lt;br&gt;With Rubber Band Library &amp;copy; Particular Programs Ltd</source>
+        <translation>&lt;br&gt;Knihovna Rubber Band &amp;copy; Particular Programs Ltd</translation>
+    </message>
+    <message>
+        <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam and QMUL</source>
+        <translation>&lt;br&gt;Podpora pro přídavné moduly Vamp (API verze %1, host SDK verze %2) &amp;copy; Chris Cannam and QMUL</translation>
+    </message>
+    <message>
+        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Particular Programs Ltd</source>
+        <translation>&lt;br&gt;Knihovna Dataquay Qt/RDF &amp;copy; Particular Programs Ltd</translation>
+    </message>
+    <message>
+        <source>&lt;br&gt;With Cap&apos;n Proto serialisation &amp;copy; Sandstorm Development Group</source>
+        <translation>&lt;br&gt;Vydávání na pokračování Cap&apos;n Proto &amp;copy; Vývojová skupina Sandstorm</translation>
+    </message>
+    <message>
+        <source>What&apos;s &amp;New?</source>
+        <translation>Co je &amp;nového?</translation>
+    </message>
+    <message>
+        <source>Show changes in this release of %1</source>
+        <translation>Ukázat změny v tomto vydání %1</translation>
+    </message>
+    <message>
+        <source>Failed to query transform attributes</source>
+        <translation>Nepodařilo se zeptat se na vlastnosti proměn</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Failed to query transform attributes&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Nepodařilo se zeptat se na vlastnosti proměn&lt;/b&gt;&lt;p&gt;Chyba přídavného modulu nebo serveru: %1&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>Transform failed</source>
+        <translation>Proměna selhala</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Failed to run transform&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Nepodařilo se spustit proměnu&lt;/b&gt;&lt;p&gt;Chyba přídavného modulu nebo serveru: %1&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>What&apos;s New</source>
+        <translation>Co je nového</translation>
+    </message>
+    <message>
+        <source>&lt;h3&gt;What&apos;s New in %1&lt;/h3&gt;</source>
+        <translation>&lt;h3&gt;Co je nového v %1&lt;/h3&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Note:&lt;/b&gt; A newer version of Sonic Visualiser is available.&lt;br&gt;(Version %1 is available; you are using version %2)</source>
+        <translation>&lt;b&gt;Poznámka:&lt;/b&gt; Je dostupná novější verze programu Sonic Visualiser.&lt;br&gt;(je dostupná verze %1; používáte verzi %2)</translation>
+    </message>
+    <message>
+        <source>%1 : %2 configuration, %3-bit build</source>
+        <translation>%1 : %2 nastavení, %3-bitové sestavení</translation>
+    </message>
+    <message>
+        <source>About %1</source>
+        <translation>O %1</translation>
+    </message>
+    <message>
+        <source>Multiplexed audio</source>
+        <translation>Víceproudý zvuk</translation>
+    </message>
+    <message>
+        <source>&lt;br&gt;With Piper Vamp protocol bridge &amp;copy; QMUL</source>
+        <translation>&lt;br&gt;Můstkový komunikační protokol Piper Vamp &amp;copy; QMUL</translation>
+    </message>
+    <message>
+        <source>Russian UI translation contributed by Alexandre Prokoudine.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Export Audio Data...</source>
-        <translation>&amp;Vyvést zvuková data...</translation>
-    </message>
-    <message>
-        <source>Export Annotation La&amp;yer...</source>
+        <source>Czech UI translation contributed by Pavel Fric.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Ctrl+Y</source>
+        <source>Shift+;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Browse Recorded Audio Folder</source>
+        <source>Ctrl+Shift+;</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Open the Recorded Audio folder in the system file browser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ctrl+Shift+Return</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Show &amp;Unit Converter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Open a window of pitch and timing conversion utilities</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Switch to Previous Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>{</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Make the previous layer in the pane current</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Switch to Next Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Make the next layer in the pane current</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Record</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Ctrl+Space</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Record a new audio file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Navigate Tool Mouse Actions</source>
-        <translation type="unfinished">Činnosti nástroje pro navádění prováděné myší</translation>
-    </message>
-    <message>
-        <source>Click left button and drag to move around</source>
-        <translation type="unfinished">Klepněte levým tlačítkem a táhněte pro přesouvání se</translation>
-    </message>
-    <message>
-        <source>Zoom to Area</source>
-        <translation type="unfinished">Přiblížit oblast</translation>
-    </message>
-    <message>
-        <source>Shift-click left button and drag to zoom to a rectangular area</source>
-        <translation type="unfinished">Shift-klepněte levým tlačítkem a táhněte pro přiblížení obdélníkové oblasti</translation>
-    </message>
-    <message>
-        <source>Relocate</source>
-        <translation type="unfinished">Přemístit</translation>
-    </message>
-    <message>
-        <source>Double-Click Left</source>
-        <translation type="unfinished">Dvakrát klepněte levým</translation>
-    </message>
-    <message>
-        <source>Double-click left button to jump to clicked location</source>
-        <translation type="unfinished">Dvakrát klepněte levým tlačítkem pro skok na klepnuté místo</translation>
-    </message>
-    <message>
-        <source>Double-click left button on an item to edit it</source>
-        <translation type="unfinished">Dvakrát klepněte levým tlačítkem na položce pro její upravení</translation>
-    </message>
-    <message>
-        <source>Select Tool Mouse Actions</source>
-        <translation type="unfinished">Činnosti nástroje výběru prováděné myší</translation>
-    </message>
-    <message>
-        <source>Click left button and drag to select region; drag region edge to resize</source>
-        <translation type="unfinished">Klepněte levým tlačítkem a táhněte pro výběr oblasti; táhněte za okraj oblasti pro změnu její velikosti</translation>
-    </message>
-    <message>
-        <source>Multi Select</source>
-        <translation type="unfinished">Vícenásobný výběr</translation>
-    </message>
-    <message>
-        <source>Cmd-click left button and drag to select an additional region</source>
-        <translation type="unfinished">Ctrl-klepněte levým tlačítkem a táhněte pro výběr další oblasti</translation>
-    </message>
-    <message>
-        <source>Ctrl-click left button and drag to select an additional region</source>
-        <translation type="unfinished">Ctrl-klepněte levým tlačítkem a táhněte pro výběr další oblasti</translation>
-    </message>
-    <message>
-        <source>Fine Select</source>
-        <translation type="unfinished">Citlivý výběr</translation>
-    </message>
-    <message>
-        <source>Shift-click left button and drag to select without snapping to items or grid</source>
-        <translation type="unfinished">Shift-klepněte levým tlačítkem a táhněte pro výběr bez zapadávání k položkám nebo mřížce</translation>
-    </message>
-    <message>
-        <source>Edit Tool Mouse Actions</source>
-        <translation type="unfinished">Činnosti nástroje úprav prováděné myší</translation>
-    </message>
-    <message>
-        <source>Move</source>
-        <translation type="unfinished">Posunout</translation>
-    </message>
-    <message>
-        <source>Click left button on an item or selected region and drag to move</source>
-        <translation type="unfinished">Klepněte levým tlačítkem na položku nebo vybranou oblast a táhněte pro její přesun</translation>
-    </message>
-    <message>
-        <source>Draw Tool Mouse Actions</source>
-        <translation type="unfinished">Činnosti nástroje kreslení prováděné myší</translation>
-    </message>
-    <message>
-        <source>Click left button and drag to create new item</source>
-        <translation type="unfinished">Klepněte levým tlačítkem a táhněte pro vytvoření nové položky</translation>
-    </message>
-    <message>
-        <source>Erase Tool Mouse Actions</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Click left button on an item to remove it from the layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Measure Tool Mouse Actions</source>
-        <translation type="unfinished">Činnosti nástroje měření prováděné myší</translation>
-    </message>
-    <message>
-        <source>Measure Area</source>
-        <translation type="unfinished">Oblast měření</translation>
-    </message>
-    <message>
-        <source>Click left button and drag to measure a rectangular area</source>
-        <translation type="unfinished">Klepněte levým tlačítkem a táhněte pro změření obdélníkové oblasti</translation>
-    </message>
-    <message>
-        <source>Measure Item</source>
-        <translation type="unfinished">Položka měření</translation>
-    </message>
-    <message>
-        <source>Click left button and drag to measure extents of an item or shape</source>
-        <translation type="unfinished">Klepněte levým tlačítkem a táhněte pro změření rozsahu položky nebo tvaru</translation>
-    </message>
-    <message>
-        <source>1. %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>%1. %2</source>
-        <translation type="unfinished">%1: %2 {1.?}</translation>
-    </message>
-    <message>
-        <source>Multiplex all of the above</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Playback speed: %1% (%2x slower)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Playback speed: %1% (%2x faster)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Problems loading plugins</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
-        <translation type="unfinished">&lt;h3&gt;Je dostupná novější verze&lt;/h3&gt;&lt;p&gt;Používáte verzi %1 programu Sonic Visualiser, ale nyní je dostupná verze %3.&lt;/p&gt;&lt;p&gt;Podívejte se, prosím, na stránky &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;projektu Sonic Visualiser&lt;/a&gt;, abyste získal více informací.&lt;/p&gt; {3&gt;?} {3&gt;?} {1 ?} {2 ?}</translation>
-    </message>
 </context>
 <context>
     <name>MainWindowBase</name>
@@ -3834,7 +4119,7 @@
     </message>
     <message>
         <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device for playback.&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Žádný zvuk není dostupný&lt;/b&gt;&lt;p&gt; Zvukové zařízení se nepodařilo otevřít pro přehrávání.&lt;p&gt;Automatické určení zvukového zařízení se nezdařilo. Přehrávání zvuku během tohoto sezení nebude dostupné.&lt;/p&gt;</translation>
+        <translation type="vanished">&lt;b&gt;Žádný zvuk není dostupný&lt;/b&gt;&lt;p&gt; Zvukové zařízení se nepodařilo otevřít pro přehrávání.&lt;p&gt;Automatické určení zvukového zařízení se nezdařilo. Přehrávání zvuku během tohoto sezení nebude dostupné.&lt;/p&gt;</translation>
     </message>
     <message>
         <source>Add Point</source>
@@ -3964,10 +4249,83 @@
     </message>
     <message>
         <source>Import Recorded Audio</source>
+        <translation>Zavést nahraný zvuk</translation>
+    </message>
+    <message>
+        <source>Recording: %1</source>
+        <translation>Nahrává se: %1</translation>
+    </message>
+    <message>
+        <source>Not enough disc space</source>
+        <translation>Nedostatek místa na disku</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Not enough disc space&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough spare disc space to accommodate any necessary temporary files.&lt;/p&gt;&lt;p&gt;Please clear some space and try again.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Nedostatek místa na disku&lt;/b&gt;&lt;p&gt;&lt;/p&gt;Zdá se, že na disku není dostatek místa na to, aby pojalo všechny nezbytné dočasné soubory.&lt;p&gt; &lt;/p&gt;&lt;p&gt;Uvolněte, prosím, nějaké místo a zkuste to znovu.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Není dostupný žádný zvuk&lt;/b&gt;&lt;p&gt;Nepodařilo se otevřít zvukové zařízení.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open audio device: %1&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Není dostupný žádný zvuk&lt;/b&gt;&lt;p&gt;Nepodařilo se otevřít zvukové zařízení: %1&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Automatické zjištění zvukového zařízení selhalo. Přehrávání zvuku a nahrávání nebudou během tohoto sezení dostupné.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Automatické zjištění zvukového zařízení selhalo. Přehrávání zvuku nebude během tohoto sezení dostupné.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;).&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Není dostupný žádný zvuk&lt;/b&gt;&lt;p&gt;Nepodařilo se otevřít vámi upřednostňovaný ovladač zvuku (&quot;%1&quot;).&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;): %2.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Není dostupný žádný zvuk&lt;/b&gt;&lt;p&gt;Nepodařilo se otevřít vámi upřednostňovaný ovladač zvuku (&quot;%1&quot;): %2.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Přehrávání zvuku a nahrávání nebudou během tohoto sezení dostupné.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Přehrávání zvuku nebude během tohoto sezení dostupné.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>No record device available</source>
+        <translation>Není dostupné žádné nahrávací zařízení</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;No record device available&lt;/b&gt;&lt;p&gt;Failed to find or open an audio device for recording. Only playback will be available.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Není dostupné žádné nahrávací zařízení.&lt;/b&gt;&lt;p&gt;Nepodařilo se najít nebo otevřít zvukové zařízení pro nahrávání. Bude dostupné pouze přehrávání.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>Recording failed</source>
+        <translation>Nahrávání selhalo</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Recording failed&lt;/b&gt;&lt;p&gt;Failed to switch to record mode (some internal problem?)&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Nahrávání selhalo&lt;/b&gt;&lt;p&gt;Nepodařilo se přepnout do nahrávacího režimu (nějaké potíže uvnitř?)&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>Not enough memory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Recording: %1</source>
+        <source>&lt;b&gt;Not enough memory&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough memory to accommodate any necessary temporary data.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Incomplete session loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Some of the audio content referred to by the original session file could not be loaded.
+If you save this session, it will be saved without any reference to that audio, and information may be lost.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -4068,15 +4426,27 @@
     <name>NetworkPermissionTester</name>
     <message>
         <source>Welcome to Sonic Visualiser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary, University of London, Sonic Visualiser is provided free as open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like to make networking connections and open a network port.&lt;/p&gt;&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control, where configured; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;No personal information will be sent, no tracking is carried out, and all requests happen in the background without interrupting your work.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful. But if you do not wish to do so, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
+        <translation>Vítejte v Sonic Visualiseru</translation>
     </message>
     <message>
         <source>Allow this</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolit</translation>
+    </message>
+    <message>
+        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary University of London, Sonic Visualiser is open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like permission to use the network.&lt;/p&gt;</source>
+        <translation>&lt;h2&gt;Vítejte v Sonic Visualiseru!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser je program na zobrazování a zkoumání zvukových dat pro semantický rozbor hudby a psaní poznámek.&lt;/p&gt;&lt;p&gt;Vyvíjen ve Středisku pro digitální hudbu (Centre for Digital Music) na londýnské univerzitě královny Marie (Queen Mary University of London), Sonic Visualiser je program s otevřeným zdrojovým kódem pod veřejnou obecnou licencí GNU (GNU General Public License).&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Předtím než budeme pokračovat...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser chce požádat o svolení k používání sítě.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation>&lt;p&gt;Účelem je:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Najít informace o dostupných a nainstalovaných přídavných modulech;&lt;/li&gt;&lt;li&gt; Podpořit používání Open Sound Control; a&lt;/li&gt;&lt;li&gt; Říct vám, když jsou dostupné aktualizace.&lt;/li&gt;&lt;/ul&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation>&lt;p&gt;Účelem je:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Najít informace o dostupných a nainstalovaných přídavných modulech;&lt;/li&gt;&lt;li&gt; Říct vám, když jsou dostupné aktualizace.&lt;/li&gt;&lt;/ul&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;&lt;b&gt;No personal information will be sent, no tracking is carried out, and no individual information will be shared with anyone else.&lt;/b&gt; We will however make aggregate counts of distinct requests for usage reporting.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful to you and supports the public funding of this work. But if you do not wish to allow it, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
+        <translation>&lt;p&gt;&lt;b&gt;Nebudou odesílány žádné osobní informace, neprovádí se žádné sledování, a žádné údaje o jednotlivci nebudou s nikým dalším sdíleny.&lt;/b&gt; Nicméně budeme dělat úhrnné součty odlišných požadavků pro zpravodajství o užití.&lt;/p&gt;&lt;p&gt;Doporučujeme, abyste toto povolil, protože to pro vás dělá Sonic Visualiser užitečnějším a podporuje veřejné financování této práce. Pokud si to však nepřejete, zrušte, prosím, zaškrtnutí okénka níže.&lt;br&gt;&lt;/p&gt;</translation>
     </message>
 </context>
 <context>
@@ -4256,7 +4626,7 @@
     <name>Overview</name>
     <message>
         <source>Click and drag to navigate; double-click to jump</source>
-        <translation>Klepněte a táhněte pro navádění; dvakrát klepněte pro skok</translation>
+        <translation>Klepněte a táhněte pro navedení; dvakrát klepněte pro skok</translation>
     </message>
     <message>
         <source>Overview</source>
@@ -4355,7 +4725,7 @@
     </message>
     <message>
         <source>Click and drag to select a range; hold Ctrl for multi-select; middle-click and drag to navigate</source>
-        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navedení</translation>
     </message>
     <message>
         <source>Reset horizontal and vertical zoom levels to their defaults</source>
@@ -4411,7 +4781,7 @@
     </message>
     <message>
         <source>Click and drag to select a range; middle-click and drag to navigate</source>
-        <translation>Klepněte a táhněte pro výběr rozsahu; klepněte prostředním tlačítkem a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro výběr rozsahu; klepněte prostředním tlačítkem a táhněte pro navedení</translation>
     </message>
     <message>
         <source>Scroll up or down in the vertical axis</source>
@@ -4423,7 +4793,7 @@
     </message>
     <message>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; middle-click to navigate</source>
-        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Shift, abyste se vyhnul zapadávání k položkám; klepněte prostředním tlačítkem a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Shift, abyste se vyhnul přichytávání k položkám; klepněte prostředním tlačítkem a táhněte pro navedení</translation>
     </message>
     <message>
         <source>Alt+Wheel</source>
@@ -4435,7 +4805,7 @@
     </message>
     <message>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Ctrl for multi-select; middle-click and drag to navigate</source>
-        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Shift, abyste se vyhnul zapadávání k položkám; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Shift, abyste se vyhnul přichytávání k položkám; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navedení</translation>
     </message>
     <message>
         <source>Click and drag to adjust the visible range of the vertical scale</source>
@@ -4443,7 +4813,7 @@
     </message>
     <message>
         <source>Click and drag to navigate</source>
-        <translation>Klepněte a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro navedení</translation>
     </message>
     <message>
         <source>Shift+Wheel</source>
@@ -4479,7 +4849,7 @@
     </message>
     <message>
         <source>Navigate</source>
-        <translation>Navádět</translation>
+        <translation>Navedení</translation>
     </message>
     <message>
         <source>Ctrl+Left</source>
@@ -4515,7 +4885,7 @@
     </message>
     <message>
         <source>Click middle button and drag to navigate with any tool</source>
-        <translation>Klepněte prostředním tlačítkem a táhněte pro vedení s jakýmkoli nástrojem</translation>
+        <translation>Klepněte prostředním tlačítkem a táhněte pro navedení s jakýmkoli nástrojem</translation>
     </message>
     <message>
         <source>Double-Click Left</source>
@@ -4527,7 +4897,7 @@
     </message>
     <message>
         <source>Shift-click left button and drag to select without snapping to items or grid</source>
-        <translation type="vanished">Shift-klepněte levým tlačítkem a táhněte pro výběr bez zapadávání k položkám nebo mřížce</translation>
+        <translation type="vanished">Shift a klepněte levým tlačítkem a táhněte pro výběr bez přichytávání k položkám nebo mřížce</translation>
     </message>
     <message>
         <source>Relocate</source>
@@ -4539,7 +4909,7 @@
     </message>
     <message>
         <source>Navigate Tool Mouse Actions</source>
-        <translation type="vanished">Činnosti nástroje pro navádění prováděné myší</translation>
+        <translation type="vanished">Činnosti nástroje pro navedení prováděné myší</translation>
     </message>
     <message>
         <source>Reference</source>
@@ -4615,11 +4985,11 @@
     </message>
     <message>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Cmd for multi-select; middle-click and drag to navigate</source>
-        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Shift, abyste se vyhnul zapadávání k položkám; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Shift, abyste se vyhnul přichytávání k položkám; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navedení</translation>
     </message>
     <message>
         <source>Click and drag to select a range; hold Cmd for multi-select; middle-click and drag to navigate</source>
-        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navádění</translation>
+        <translation>Klepněte a táhněte pro výběr rozsahu; držte klávesu Ctrl pro provedení vícenásobného výběru; klepněte prostředním tlačítkem a táhněte pro navedení</translation>
     </message>
 </context>
 <context>
@@ -4650,7 +5020,7 @@
     </message>
     <message>
         <source>Change Playback Sample</source>
-        <translation type="unfinished"></translation>
+        <translation>Změnit vzorek přehrávání</translation>
     </message>
 </context>
 <context>
@@ -4771,6 +5141,125 @@
     </message>
 </context>
 <context>
+    <name>PluginPathConfigurator</name>
+    <message>
+        <source>Move the selected location later in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Move the selected location earlier in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Add a new location to the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Remove the selected location from the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Reset to Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Reset the list for this plugin type to its default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Review plugins...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Plugin locations for plugin type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Vamp (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>LADSPA (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>DSSI (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>(Variable is currently unset)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>(Current value begins: &quot;%1 ...&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>(Currently set to: &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Allow the %1 environment variable to take priority over this
+%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Choose directory to add</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>PluginReviewDialog</name>
+    <message>
+        <source>Plugins Loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation type="unfinished">Typ</translation>
+    </message>
+    <message>
+        <source>Library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Found in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Name</source>
+        <translation type="unfinished">Název</translation>
+    </message>
+    <message>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>Preferences</name>
     <message>
         <source>Hann</source>
@@ -4942,39 +5431,43 @@
     </message>
     <message>
         <source>Normalise audio signal when reading from audio file</source>
-        <translation type="unfinished"></translation>
+        <translation>Normalizovat zvukový signál při čtení ze zvukového souboru</translation>
     </message>
     <message>
         <source>Single fixed sample rate to resample all files to</source>
-        <translation type="unfinished"></translation>
+        <translation>Jeden pevný vzorkovací kmitočet pro převzorkování všech souborů</translation>
     </message>
     <message>
         <source>Time display precision</source>
-        <translation type="unfinished"></translation>
+        <translation>Přesnost zobrazení času</translation>
     </message>
     <message>
         <source>Use hours:minutes:seconds format</source>
-        <translation type="unfinished"></translation>
+        <translation>Použít formát hodiny:minuty:sekundy</translation>
     </message>
     <message>
         <source>Label middle C as</source>
-        <translation type="unfinished"></translation>
+        <translation>Opatřit štítkem jednočárkované C (C1, C&apos;)</translation>
     </message>
     <message>
         <source>C0 - middle of octave scale</source>
-        <translation type="unfinished"></translation>
+        <translation>C0 - střed rozsahu oktávy</translation>
     </message>
     <message>
         <source>C3 - common MIDI sequencer convention</source>
-        <translation type="unfinished"></translation>
+        <translation>C3 -  obecná zvyklost pro sekvencer MIDI</translation>
     </message>
     <message>
         <source>C4 - ASA American standard</source>
-        <translation type="unfinished"></translation>
+        <translation>C4 - americký standard ASA</translation>
     </message>
     <message>
         <source>C5 - used in Cakewalk and others</source>
-        <translation type="unfinished"></translation>
+        <translation>C5 - používáno v programu Cakewalk a dalších</translation>
+    </message>
+    <message>
+        <source>Load mp3 files in gapless mode</source>
+        <translation>Nahrát soubory MP v bezmezerovém režimu</translation>
     </message>
 </context>
 <context>
@@ -5019,7 +5512,7 @@
     </message>
     <message>
         <source>Default session template for audio files:</source>
-        <translation>Výchozí předloha sezení pro zvukové soubory:</translation>
+        <translation type="vanished">Výchozí předloha sezení pro zvukové soubory:</translation>
     </message>
     <message>
         <source>Anal&amp;ysis</source>
@@ -5047,7 +5540,7 @@
     </message>
     <message>
         <source>&amp;General</source>
-        <translation>&amp;Obecné</translation>
+        <translation type="vanished">&amp;Obecné</translation>
     </message>
     <message>
         <source>Playback audio device:</source>
@@ -5079,22 +5572,74 @@
     </message>
     <message>
         <source>Allow network usage</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolit používání sítě</translation>
     </message>
     <message>
         <source>Draw layers at Retina resolution:</source>
-        <translation type="unfinished"></translation>
+        <translation>Kreslit vrstvy v rozlišení Retina:</translation>
     </message>
     <message>
         <source>Default spectrogram colour:</source>
-        <translation type="unfinished"></translation>
+        <translation>Výchozí barva spektrogramu:</translation>
     </message>
     <message>
         <source>Default melodic spectrogram colour:</source>
-        <translation type="unfinished"></translation>
+        <translation>Výchozí barva melodického spektrogramu:</translation>
     </message>
     <message>
         <source>Default colour 3D plot colour:</source>
+        <translation>Výchozí barva barevného trojrozměrného nákresu:</translation>
+    </message>
+    <message>
+        <source>Green</source>
+        <translation>Zelená</translation>
+    </message>
+    <message>
+        <source>(auto)</source>
+        <translation>(auto)</translation>
+    </message>
+    <message>
+        <source>Overview waveform colour:</source>
+        <translation>Barva tvaru vlny přehledu:</translation>
+    </message>
+    <message>
+        <source>Run Vamp plugins in separate process:</source>
+        <translation>Spustit přídavné moduly Vamp v samostatném procesu:</translation>
+    </message>
+    <message>
+        <source>Default session template when loading audio files:</source>
+        <translation>Výchozí předloha sezení při nahrávání zvukových souborů:</translation>
+    </message>
+    <message>
+        <source>(Use &quot;%1&quot; in the File menu to add to these.)</source>
+        <translation>Použít &quot;%1&quot; v nabídce Soubor pro přidání k těmto.)</translation>
+    </message>
+    <message>
+        <source>Export Session as Template...</source>
+        <translation>Vyvést sezení jako předlohu...</translation>
+    </message>
+    <message>
+        <source>Audio service:</source>
+        <translation>Zvuková služba:</translation>
+    </message>
+    <message>
+        <source>Audio playback device:</source>
+        <translation>Zařízení pro přehrávání zvuku:</translation>
+    </message>
+    <message>
+        <source>Audio record device:</source>
+        <translation>Zařízení pro nahrávání zvuku:</translation>
+    </message>
+    <message>
+        <source>A&amp;udio I/O</source>
+        <translation>Vstup/Výstup &amp;zvuku</translation>
+    </message>
+    <message>
+        <source>&amp;Other</source>
+        <translation>&amp;Jiné</translation>
+    </message>
+    <message>
+        <source>&amp;Plugins</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5109,11 +5654,11 @@
     <name>PropertyBox</name>
     <message>
         <source>dB</source>
-        <translation>dB</translation>
+        <translation type="vanished">dB</translation>
     </message>
     <message>
         <source>Play</source>
-        <translation>Přehrát</translation>
+        <translation type="vanished">Přehrát</translation>
     </message>
     <message>
         <source>Show</source>
@@ -5137,11 +5682,11 @@
     </message>
     <message>
         <source>Playback Pan / Balance</source>
-        <translation>Vyvážení přehrávání/rovnováha</translation>
+        <translation type="vanished">Vyvážení přehrávání/rovnováha</translation>
     </message>
     <message>
         <source>Prefer black background for this colour</source>
-        <translation>Upřednostňovat černé pozadí pro tuto barvu</translation>
+        <translation type="vanished">Upřednostňovat černé pozadí pro tuto barvu</translation>
     </message>
     <message>
         <source>Toggle Visibility of %1</source>
@@ -5153,23 +5698,35 @@
     </message>
     <message>
         <source>Add New Colour...</source>
-        <translation>Přidat novou barvu...</translation>
+        <translation type="vanished">Přidat novou barvu...</translation>
     </message>
     <message>
         <source>Name New Colour</source>
-        <translation>Pojmenovat novou barvu</translation>
+        <translation type="vanished">Pojmenovat novou barvu</translation>
     </message>
     <message>
         <source>Enter a name for the new colour:</source>
-        <translation>Zadejte název pro novou barvu:</translation>
+        <translation type="vanished">Zadejte název pro novou barvu:</translation>
     </message>
     <message>
         <source>Playback Gain</source>
-        <translation>Zesílení přehrávání</translation>
+        <translation type="vanished">Zesílení přehrávání</translation>
     </message>
     <message>
         <source>Set playback clip:</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavit záběr přehrávání:</translation>
+    </message>
+    <message>
+        <source>Click to toggle playback</source>
+        <translation>Klepnout pro přepnutí přehrávání</translation>
+    </message>
+    <message>
+        <source>Adjust playback level and pan of %1</source>
+        <translation>Přizpůsobit úroveň přehrávání a vyvážení %1</translation>
+    </message>
+    <message>
+        <source>Change sound used for playback (currently &quot;%1&quot;)</source>
+        <translation>Změnit zvuk používaný pro přehrávání (nyní &quot;%1&quot;)</translation>
     </message>
 </context>
 <context>
@@ -5280,24 +5837,91 @@
 <context>
     <name>QObject</name>
     <message>
-        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Failed to load library</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Failed to query plugins from library after loading</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Unknown failure</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Success: internal error?</source>
+        <source>External plugin host executable does not appear to be installed</source>
+        <translation>Zdá se, že není nainstalován spustitelný soubor pro vnějšího hostitele přídavného modulu</translation>
+    </message>
+    <message>
+        <source>Could not start external plugin host</source>
+        <translation>Nepodařilo se spustit vnějšího hostitele přídavného modulu</translation>
+    </message>
+    <message>
+        <source>External plugin host exited unexpectedly while listing plugins</source>
+        <translation>Vnější hostitel přídavného modulu byl během vypisování přídavných modulů neočekávaně ukončen</translation>
+    </message>
+    <message>
+        <source>External plugin host invocation failed: %1</source>
+        <translation>Nepodařilo se vyvolat vnějšího hostitele přídavného modulu: %1</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Did not scan for plugins&lt;/b&gt;&lt;p&gt;Apparently no scan for plugins was attempted (internal error?)&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Neprohledáno na přídavné moduly&lt;/b&gt;&lt;p&gt;Podle všeho nedošlo k žádnému pokusu o prohledání na přídavné moduly (vnitřní chyba?)&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Nepodařilo se nahrát přídavné moduly&lt;/b&gt;&lt;p&gt;Nepodařilo se nahrát jednu nebo více knihoven s přídavnými moduly:&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;These plugins may be incompatible with the system, and will be ignored during this run of %1.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Tyto přídavné moduly se nemusí slučovat se systémem, a budou během tohoto spuštění %1 přehlíženy.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;unknown&gt;</source>
+        <translation>&lt;neznámý&gt;</translation>
+    </message>
+    <message>
+        <source>Green</source>
+        <translation>Zelená</translation>
+    </message>
+    <message>
+        <source>White on Black</source>
+        <translation>Bílá na černé</translation>
+    </message>
+    <message>
+        <source>Black on White</source>
+        <translation>Černá na bílé</translation>
+    </message>
+    <message>
+        <source>Cherry</source>
+        <translation>Třešňová barva</translation>
+    </message>
+    <message>
+        <source>Wasp</source>
+        <translation>Vosa</translation>
+    </message>
+    <message>
+        <source>Ice</source>
+        <translation>Led</translation>
+    </message>
+    <message>
+        <source>Sunset</source>
+        <translation>Západ slunce</translation>
+    </message>
+    <message>
+        <source>Fruit Salad</source>
+        <translation>Ovocný salát</translation>
+    </message>
+    <message>
+        <source>Banded</source>
+        <translation>Pruhovaný</translation>
+    </message>
+    <message>
+        <source>Highlight</source>
+        <translation>Zvýraznění</translation>
+    </message>
+    <message>
+        <source>Printer</source>
+        <translation>Tiskárna</translation>
+    </message>
+    <message>
+        <source>High Gain</source>
+        <translation>Zesílení výšek</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;Failed to scan for plugins&lt;/b&gt;&lt;p&gt;Failed to scan for plugins at startup. Possibly the plugin checker program was not correctly installed alongside %1?&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Nepodařilo se prohledat na přídavné moduly&lt;/b&gt;&lt;p&gt;Při spuštění se nepodařilo provést vyhledání přídavných modulů. Je možné, že kontrolor přídavných modulů nebyl zároveň s %1 správně nainstalován?&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>Exporting audio data...</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5305,7 +5929,7 @@
     <name>QuickTimeFileReader</name>
     <message>
         <source>Decoding %1...</source>
-        <translation>Dekóduje se %1...</translation>
+        <translation type="vanished">Dekóduje se %1...</translation>
     </message>
 </context>
 <context>
@@ -5341,7 +5965,7 @@
     <name>ReadOnlyWaveFileModel</name>
     <message>
         <source>Wave File</source>
-        <translation type="unfinished">Soubor Wave</translation>
+        <translation>Soubor Wave</translation>
     </message>
 </context>
 <context>
@@ -5479,7 +6103,7 @@
     </message>
     <message>
         <source>Frame</source>
-        <translation>Rámeček</translation>
+        <translation>Snímek</translation>
     </message>
     <message>
         <source>Label</source>
@@ -5790,7 +6414,7 @@
     </message>
     <message>
         <source>-Inf</source>
-        <translation>-Inf</translation>
+        <translation type="vanished">-Inf</translation>
     </message>
     <message>
         <source>25 %</source>
@@ -5984,7 +6608,7 @@
     </message>
     <message>
         <source>Smoothing</source>
-        <translation>Vyhlazování</translation>
+        <translation type="vanished">Vyhlazování</translation>
     </message>
     <message>
         <source>dB:	%1</source>
@@ -6072,7 +6696,19 @@
     </message>
     <message>
         <source>Normalization</source>
-        <translation type="unfinished"></translation>
+        <translation>Normalizace</translation>
+    </message>
+    <message>
+        <source>Col</source>
+        <translation>Barva</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>Pohled</translation>
+    </message>
+    <message>
+        <source>Hybrid</source>
+        <translation>Smíšený</translation>
     </message>
 </context>
 <context>
@@ -6083,7 +6719,7 @@
     </message>
     <message>
         <source>-Inf</source>
-        <translation>-Inf</translation>
+        <translation type="vanished">-Inf</translation>
     </message>
     <message>
         <source>25 %</source>
@@ -6173,6 +6809,10 @@
         <source>%1 - %2 Hz</source>
         <translation></translation>
     </message>
+    <message>
+        <source>Hz</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SubdividingMenu</name>
@@ -6185,11 +6825,11 @@
     <name>Surveyer</name>
     <message>
         <source>No, thanks</source>
-        <translation type="unfinished">Ne, děkuji</translation>
+        <translation>Ne, děkuji</translation>
     </message>
     <message>
         <source>Yes! Take me to the survey</source>
-        <translation type="unfinished">Ano! Vezmi mě do průzkumu</translation>
+        <translation>Ano! Vezmi mě do průzkumu</translation>
     </message>
 </context>
 <context>
@@ -6592,39 +7232,35 @@
     </message>
     <message>
         <source>Discrete Curves</source>
-        <translation type="unfinished"></translation>
+        <translation>Samostatné křivky</translation>
     </message>
     <message>
         <source>%1 Hz (%2, %3)</source>
-        <translation type="unfinished">%1 Hz (%2, %3)</translation>
+        <translation>%1 Hz (%2, %3)</translation>
     </message>
     <message>
         <source>%1 %2</source>
-        <translation type="unfinished">%1 %2</translation>
+        <translation>%1 %2</translation>
     </message>
     <message>
         <source>%1</source>
-        <translation type="unfinished">%1</translation>
+        <translation>%1</translation>
     </message>
     <message>
         <source>Time:	%1
 Value:	%2
 No label</source>
-        <translation type="unfinished">Čas:	%1
-Hodnota:	%2%3
-Žádný štítek {1
-?} {2
-?}</translation>
+        <translation>Čas:	%1
+Hodnota:	%2
+Žádný štítek</translation>
     </message>
     <message>
         <source>Time:	%1
 Value:	%2
 Label:	%4</source>
-        <translation type="unfinished">Čas:	%1
-Hodnota:	%2%3
-Štítek:	%4 {1
-?} {2
-?}</translation>
+        <translation>Čas:	%1
+Hodnota:	%2
+Štítek:	%4</translation>
     </message>
 </context>
 <context>
@@ -6748,6 +7384,10 @@
         <source>Effects Data</source>
         <translation>Efektová data</translation>
     </message>
+    <message>
+        <source>Failed to list Vamp plugins: %1</source>
+        <translation>Nepodařilo se vypsat přídavné moduly Vamp: %1</translation>
+    </message>
 </context>
 <context>
     <name>TransformFinder</name>
@@ -6856,56 +7496,57 @@
     <name>UnitConverter</name>
     <message>
         <source>Pitch</source>
-        <translation type="unfinished">Výška tónu</translation>
+        <translation>Výška tónu</translation>
     </message>
     <message>
         <source> cents</source>
-        <translation type="unfinished"></translation>
+        <translation> centů</translation>
     </message>
     <message>
         <source>In 12-tone Equal Temperament:</source>
-        <translation type="unfinished"></translation>
+        <translation>V 12-tónovém rovnoměrně temperovaném ladění:</translation>
     </message>
     <message>
         <source>=</source>
-        <translation type="unfinished"></translation>
+        <translation>=</translation>
     </message>
     <message>
         <source>+</source>
-        <translation type="unfinished"></translation>
+        <translation>+</translation>
     </message>
     <message>
         <source>Piano note</source>
-        <translation type="unfinished"></translation>
+        <translation>Nota klavíru</translation>
     </message>
     <message>
         <source>in octave</source>
-        <translation type="unfinished"></translation>
+        <translation>v oktávě</translation>
     </message>
     <message>
         <source>MIDI pitch</source>
-        <translation type="unfinished"></translation>
+        <translation>Výška tónu MIDI</translation>
     </message>
     <message>
         <source>Note that only pitches in the range 0 to 127 are valid in the MIDI protocol.</source>
-        <translation type="unfinished"></translation>
+        <translation>Mějte na paměti, že v protokolu MIDI jsou platnými pouze výšky tónů v rozsahu 0 až 127.</translation>
     </message>
     <message>
         <source>Tempo</source>
-        <translation type="unfinished"></translation>
+        <translation>Tempo</translation>
     </message>
     <message>
         <source>Beat period</source>
-        <translation type="unfinished"></translation>
+        <translation>Perioda (doba) rytmu</translation>
     </message>
     <message>
         <source>at</source>
-        <translation type="unfinished"></translation>
+        <translation>na</translation>
     </message>
     <message>
         <source>With concert-A tuning frequency at %1 Hz, and middle C residing in octave %2.
 (These can be changed in the application preferences.)</source>
-        <translation type="unfinished"></translation>
+        <translation>S kmitočtem koncertního ladění A na %1 Hz a jednočárkovaným C spočívajícím v oktávě %2.
+(To vše lze změnit v nastavení programu.)</translation>
     </message>
 </context>
 <context>
@@ -6958,6 +7599,10 @@
         <source>Alignment</source>
         <translation>Zarovnání</translation>
     </message>
+    <message>
+        <source>Exported image from %1</source>
+        <translation>Vyvedený obrázek z %1</translation>
+    </message>
 </context>
 <context>
     <name>ViewManager</name>
@@ -6971,7 +7616,7 @@
     </message>
     <message>
         <source>Enter Navigate mode</source>
-        <translation>Vstoupit do režimu navádění</translation>
+        <translation>Vstoupit do režimu navedení</translation>
     </message>
     <message>
         <source>Change overlay level</source>
@@ -7047,7 +7692,7 @@
     </message>
     <message>
         <source>Enter NoteEdit mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Vstoupit do režimu úprav not</translation>
     </message>
 </context>
 <context>
@@ -7069,7 +7714,7 @@
     </message>
     <message>
         <source>-Inf</source>
-        <translation>-Inf</translation>
+        <translation type="vanished">-Inf</translation>
     </message>
     <message>
         <source>Gain</source>
Binary file i18n/sonic-visualiser_en_GB.qm has changed
--- a/i18n/sonic-visualiser_en_GB.ts	Mon Sep 17 13:53:25 2018 +0100
+++ b/i18n/sonic-visualiser_en_GB.ts	Mon Sep 17 14:05:41 2018 +0100
@@ -4,17 +4,17 @@
 <context>
     <name>ActivityLog</name>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="37"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="39"/>
         <source>Activity Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="42"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="44"/>
         <source>&lt;p&gt;Activity Log lists your interactions and other events within %1.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="77"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="79"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -22,7 +22,7 @@
 <context>
     <name>AddLayerCommand</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="1179"/>
+        <location filename="../svapp/framework/Document.cpp" line="1129"/>
         <source>Add %1 Layer</source>
         <translation type="unfinished"></translation>
     </message>
@@ -44,59 +44,85 @@
     </message>
 </context>
 <context>
+    <name>AlignmentView</name>
+    <message>
+        <location filename="../svgui/view/AlignmentView.cpp" line="31"/>
+        <source>AlignmentView</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioCallbackPlaySource</name>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="499"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="525"/>
         <source>Play from %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="522"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="548"/>
         <source>Stop at %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="1105"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="1089"/>
         <source>Change time-stretch factor to %1</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioCallbackRecordTarget</name>
+    <message>
+        <location filename="../svapp/audio/AudioCallbackRecordTarget.cpp" line="271"/>
+        <source>recorded-%1.wav</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/audio/AudioCallbackRecordTarget.cpp" line="272"/>
+        <source>Recorded %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioDial</name>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="416"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="419"/>
+        <source>%1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="429"/>
         <source>%1: %2%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="418"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="431"/>
         <source>%2%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="481"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="495"/>
         <source>New value for %1, from %2 to %3 %4:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="484"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="498"/>
         <source>New value for %1, from %2 to %3:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="489"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="503"/>
         <source>Enter a new value from %1 to %2 %3:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="492"/>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="516"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="506"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="530"/>
         <source>Enter a new value from %1 to %2:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="499"/>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="515"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="513"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="529"/>
         <source>Enter new value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -104,72 +130,82 @@
 <context>
     <name>BZipFileDevice</name>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="51"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="59"/>
         <source>File is already open</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="56"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="64"/>
         <source>Append mode not supported</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="62"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="70"/>
         <source>File access mode not specified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="68"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="76"/>
         <source>Read and write modes both specified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="77"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="105"/>
         <source>Failed to open file for writing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="88"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="112"/>
+        <source>Failed to open file handle for writing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="125"/>
         <source>Failed to open bzip2 stream for writing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="104"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="140"/>
         <source>Failed to open file for reading</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="115"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="147"/>
+        <source>Failed to open file handle for reading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="159"/>
         <source>Failed to open bzip2 stream for reading</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="129"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="173"/>
         <source>Internal error (open for neither read nor write)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="138"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="182"/>
         <source>File not open</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="150"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="194"/>
         <source>bzip2 stream write close error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="162"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="207"/>
         <source>bzip2 stream read close error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="171"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="217"/>
         <source>Internal error (close for neither read nor write)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="188"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="234"/>
         <source>bzip2 stream read error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -188,8 +224,7 @@
 <context>
     <name>CSVFileWriter</name>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="67"/>
-        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="92"/>
+        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="81"/>
         <source>Failed to open file %1 for writing</source>
         <translation type="unfinished"></translation>
     </message>
@@ -296,91 +331,114 @@
 <context>
     <name>Colour3DPlotLayer</name>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="177"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="223"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="269"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="310"/>
         <source>Colour</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="178"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="218"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="270"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="305"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="179"/>
         <source>Normalize Columns</source>
-        <translation type="unfinished">Normalise Columns</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="180"/>
+        <translation type="obsolete">Normalise Columns</translation>
+    </message>
+    <message>
         <source>Normalize Visible Area</source>
-        <translation type="unfinished">Normalise Visible Area</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="181"/>
+        <translation type="obsolete">Normalise Visible Area</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="271"/>
+        <source>Normalization</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="272"/>
         <source>Invert Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="273"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="183"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="274"/>
         <source>Always Opaque</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="184"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="275"/>
         <source>Smooth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="185"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="276"/>
         <source>Bin Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="220"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="307"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="316"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="325"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="402"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="421"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="317"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="326"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="403"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="422"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="318"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="404"/>
         <source>+/-1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="319"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="405"/>
         <source>Absolute</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="329"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="411"/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="412"/>
+        <source>Col</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="413"/>
+        <source>View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="414"/>
+        <source>Hybrid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="425"/>
         <source>&lt;unknown&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="336"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="448"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="750"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="837"/>
         <source>Time:	%1 - %2
 Bin:	%3
 Value:	%4</source>
@@ -388,71 +446,25 @@
     </message>
 </context>
 <context>
-    <name>ColourMapper</name>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="88"/>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="106"/>
-        <source>&lt;unknown&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="93"/>
-        <source>White on Black</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="94"/>
-        <source>Black on White</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="92"/>
-        <source>Green</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="95"/>
-        <source>Cherry</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="96"/>
-        <source>Wasp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="97"/>
-        <source>Ice</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="98"/>
-        <source>Sunset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="99"/>
-        <source>Fruit Salad</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="100"/>
-        <source>Banded</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="101"/>
-        <source>Highlight</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="102"/>
-        <source>Printer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="103"/>
-        <source>High Gain</source>
+    <name>ColourComboBox</name>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="59"/>
+        <source>Name New Colour</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="60"/>
+        <source>Enter a name for the new colour:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="62"/>
+        <source>Prefer black background for this colour</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="94"/>
+        <source>Add New Colour...</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -535,7 +547,7 @@
 <context>
     <name>DecodingWavFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/DecodingWavFileReader.cpp" line="66"/>
+        <location filename="../svcore/data/fileio/DecodingWavFileReader.cpp" line="68"/>
         <source>Decoding %1...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -543,7 +555,7 @@
 <context>
     <name>Dense3DModelPeakCache</name>
     <message>
-        <location filename="../svcore/data/model/Dense3DModelPeakCache.h" line="79"/>
+        <location filename="../svcore/data/model/Dense3DModelPeakCache.h" line="94"/>
         <source>Dense 3-D Peak Cache</source>
         <translation type="unfinished"></translation>
     </message>
@@ -551,17 +563,17 @@
 <context>
     <name>DenseThreeDimensionalModel</name>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="120"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="121"/>
         <source>Dense 3-D</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="137"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="138"/>
         <source>Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="138"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="139"/>
         <source>Frame</source>
         <translation type="unfinished"></translation>
     </message>
@@ -569,7 +581,7 @@
 <context>
     <name>DenseTimeValueModel</name>
     <message>
-        <location filename="../svcore/data/model/DenseTimeValueModel.h" line="82"/>
+        <location filename="../svcore/data/model/DenseTimeValueModel.h" line="89"/>
         <source>Dense Time-Value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -577,12 +589,12 @@
 <context>
     <name>Document</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="415"/>
+        <location filename="../svapp/framework/Document.cpp" line="421"/>
         <source>Set main model to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="417"/>
+        <location filename="../svapp/framework/Document.cpp" line="423"/>
         <source>Clear main model</source>
         <translation type="unfinished"></translation>
     </message>
@@ -590,7 +602,7 @@
 <context>
     <name>EditableDenseThreeDimensionalModel</name>
     <message>
-        <location filename="../svcore/data/model/EditableDenseThreeDimensionalModel.h" line="182"/>
+        <location filename="../svcore/data/model/EditableDenseThreeDimensionalModel.h" line="189"/>
         <source>Editable Dense 3-D</source>
         <translation type="unfinished"></translation>
     </message>
@@ -598,12 +610,12 @@
 <context>
     <name>FFTModel</name>
     <message>
-        <location filename="../svcore/data/model/FFTModel.h" line="138"/>
+        <location filename="../svcore/data/model/FFTModel.h" line="140"/>
         <source>FFT</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/FFTModel.cpp" line="92"/>
+        <location filename="../svcore/data/model/FFTModel.cpp" line="100"/>
         <source>%1 Hz</source>
         <translation type="unfinished"></translation>
     </message>
@@ -634,53 +646,53 @@
 <context>
     <name>FeatureExtractionModelTransformer</name>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="84"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="87"/>
         <source>Transforms supplied to a single FeatureExtractionModelTransformer instance must be similar in every respect except plugin output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="97"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="101"/>
         <source>No factory available for feature extraction plugin id &quot;%1&quot; (unknown plugin type, or internal error?)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="103"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="108"/>
         <source>Input model for feature extraction plugin &quot;%1&quot; is of wrong type (internal error?)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="109"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="118"/>
         <source>Failed to instantiate plugin &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="124"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="134"/>
         <source>Cannot provide enough channels to feature extraction plugin &quot;%1&quot; (plugin min is %2, max %3; input model has %4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="156"/>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="171"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="164"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="191"/>
         <source>Failed to initialise feature extraction plugin &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="161"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="176"/>
         <source>Feature extraction plugin &quot;%1&quot; rejected the given step and block sizes (%2 and %3); using plugin defaults (%4 and %5) instead</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="179"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="202"/>
         <source>Transform was configured for version %1 of plugin &quot;%2&quot;, but the plugin being used is version %3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="194"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="218"/>
         <source>Plugin &quot;%1&quot; has no outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="212"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="237"/>
         <source>Plugin &quot;%1&quot; has no output named &quot;%2&quot;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -688,29 +700,29 @@
 <context>
     <name>FileSource</name>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="124"/>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="206"/>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="239"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="122"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="204"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="237"/>
         <source>Unsupported scheme in URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="452"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="450"/>
         <source>Downloading %1...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="746"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="744"/>
         <source>Download cancelled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="774"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="772"/>
         <source>Failed to create local file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="777"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="775"/>
         <source>File contains no data!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -718,75 +730,75 @@
 <context>
     <name>FlexiNoteLayer</name>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="69"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="70"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="971"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="72"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="73"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="974"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="107"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="110"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="108"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="111"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="124"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="127"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="176"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="174"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="177"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="175"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="178"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="176"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="179"/>
         <source>MIDI Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="518"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="521"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="520"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="544"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="523"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="547"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="558"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="561"/>
         <source>%1 (%2, %3 Hz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="565"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="568"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="571"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="574"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="578"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="581"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -794,7 +806,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="583"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="586"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -802,85 +814,85 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="976"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="979"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1052"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1055"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1133"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1136"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1215"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1288"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1608"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1218"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1291"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1611"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1217"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1220"/>
         <source>Relocate Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1220"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1223"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1352"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1355"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1392"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1395"/>
         <source>Snap Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1441"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1444"/>
         <source>Merge Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1624"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1627"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1649"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1652"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1688"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1710"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1691"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1713"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1759"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1762"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1760"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1763"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1774"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1777"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1845"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1848"/>
         <source>Record FlexiNote</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1096,19 +1108,19 @@
     <name>InteractiveFileFinder</name>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="66"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="233"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="241"/>
         <source>Select file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="67"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="234"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="242"/>
         <source>All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="73"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="240"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="248"/>
         <source>Select a session file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1148,54 +1160,54 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="188"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="196"/>
         <source>File does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="189"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="197"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="194"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="202"/>
         <source>File is not readable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="195"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="203"/>
         <source>&lt;b&gt;File is not readable&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; can not be read</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="200"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="389"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="208"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="408"/>
         <source>Directory selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="201"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="390"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="209"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="409"/>
         <source>&lt;b&gt;Directory selected&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; is a directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="206"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="214"/>
         <source>Non-file selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="207"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="215"/>
         <source>&lt;b&gt;Not a file&lt;/b&gt;&lt;p&gt;Path &quot;%1&quot; is not a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="212"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="220"/>
         <source>File is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="213"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="221"/>
         <source>&lt;b&gt;File is empty&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; is empty</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1240,6 +1252,13 @@
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="140"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="297"/>
+        <source>Scalable Vector Graphics files (*.svg)
+All files (*.*)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="145"/>
         <source>Comma-separated data files (*.csv)
 Space-separated .lab files (*.lab)
 Text files (*.txt)
@@ -1247,7 +1266,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="145"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="150"/>
         <source>All supported files (*.sv %1 %2 %3)
 %4 session files (*.%5)
 Audio files (%1)
@@ -1257,30 +1276,31 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="241"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="249"/>
         <source>%1 session files (*.%2)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="248"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="254"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="260"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="266"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="272"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="282"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="288"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="256"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="262"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="268"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="274"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="280"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="290"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="296"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="302"/>
         <source>Select a file to export to</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="249"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="257"/>
         <source>WAV audio files (*.wav)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="255"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="263"/>
         <source>Sonic Visualiser Layer XML files (*.svl)
 Comma-separated data files (*.csv)
 RDF/Turtle files (%1)
@@ -1290,7 +1310,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="261"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="269"/>
         <source>Sonic Visualiser Layer XML files (*.svl)
 Comma-separated data files (*.csv)
 RDF/Turtle files (%1)
@@ -1299,7 +1319,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="267"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="275"/>
         <source>Comma-separated data files (*.csv)
 Sonic Visualiser Layer XML files (*.svl)
 RDF/Turtle files (%1)
@@ -1309,7 +1329,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="273"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="281"/>
         <source>Comma-separated data files (*.csv)
 Sonic Visualiser Layer XML files (*.svl)
 RDF/Turtle files (%1)
@@ -1318,78 +1338,78 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="283"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="291"/>
         <source>Portable Network Graphics files (*.png)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="289"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="303"/>
         <source>Comma-separated data files (*.csv)
 Text files (*.txt)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="395"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="414"/>
         <source>File exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="396"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="415"/>
         <source>&lt;b&gt;File exists&lt;/b&gt;&lt;p&gt;The file &quot;%1&quot; already exists.
 Do you want to overwrite it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="544"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="567"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;Audio file &quot;%1&quot; could not be opened.
 Do you want to locate it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="546"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="569"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; could not be opened.
 Do you want to locate it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="556"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="579"/>
         <source>Failed to open file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="558"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="581"/>
         <source>Locate file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="559"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="582"/>
         <source>Use URL...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="560"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="583"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="579"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="602"/>
         <source>Use URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="580"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="603"/>
         <source>Please enter the URL to use for this file:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="588"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="611"/>
         <source>Failed to open location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="589"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="612"/>
         <source>&lt;b&gt;Failed to open location&lt;/b&gt;&lt;p&gt;URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1566,6 +1586,7 @@
     </message>
     <message>
         <location filename="../svcore/data/model/Labeller.h" line="159"/>
+        <location filename="../svcore/data/model/Labeller.h" line="259"/>
         <source>%1.%2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1575,10 +1596,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/Labeller.h" line="182"/>
+        <location filename="../svcore/data/model/Labeller.h" line="185"/>
         <source>Label Points</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svcore/data/model/Labeller.h" line="232"/>
+        <source>Subdivide Points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/model/Labeller.h" line="276"/>
+        <source>Winnow Points</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Layer</name>
@@ -1707,6 +1738,22 @@
     </message>
 </context>
 <context>
+    <name>LevelPanToolButton</name>
+    <message>
+        <location filename="../svgui/widgets/LevelPanToolButton.cpp" line="55"/>
+        <source>Click to adjust level and pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>LevelPanWidget</name>
+    <message>
+        <location filename="../svgui/widgets/LevelPanWidget.cpp" line="79"/>
+        <source>Drag vertically to adjust level, horizontally to adjust pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MIDIFileImportDialog</name>
     <message>
         <location filename="../svgui/widgets/MIDIFileImportDialog.cpp" line="32"/>
@@ -1827,7 +1874,7 @@
 <context>
     <name>MIDIInput</name>
     <message>
-        <location filename="../svcore/data/midi/MIDIInput.cpp" line="30"/>
+        <location filename="../svcore/data/midi/MIDIInput.cpp" line="63"/>
         <source>Input</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1835,7 +1882,7 @@
 <context>
     <name>MP3FileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/MP3FileReader.cpp" line="116"/>
+        <location filename="../svcore/data/fileio/MP3FileReader.cpp" line="133"/>
         <source>Decoding %1...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1843,2636 +1890,2787 @@
 <context>
     <name>MainWindow</name>
     <message>
-        <location filename="../main/MainWindow.cpp" line="183"/>
+        <location filename="../main/MainWindow.cpp" line="190"/>
         <source>Black</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="184"/>
+        <location filename="../main/MainWindow.cpp" line="191"/>
         <source>Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="185"/>
+        <location filename="../main/MainWindow.cpp" line="192"/>
         <source>Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="186"/>
-        <location filename="../main/MainWindow.cpp" line="232"/>
-        <location filename="../main/MainWindow.cpp" line="3469"/>
+        <location filename="../main/MainWindow.cpp" line="193"/>
+        <location filename="../main/MainWindow.cpp" line="3736"/>
         <source>Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="187"/>
+        <location filename="../main/MainWindow.cpp" line="194"/>
         <source>Purple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="188"/>
+        <location filename="../main/MainWindow.cpp" line="195"/>
         <source>Orange</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="189"/>
+        <location filename="../main/MainWindow.cpp" line="196"/>
         <source>White</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="190"/>
+        <location filename="../main/MainWindow.cpp" line="197"/>
         <source>Bright Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="191"/>
+        <location filename="../main/MainWindow.cpp" line="198"/>
         <source>Bright Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="192"/>
-        <location filename="../main/MainWindow.cpp" line="229"/>
-        <location filename="../main/MainWindow.cpp" line="3466"/>
+        <location filename="../main/MainWindow.cpp" line="199"/>
+        <location filename="../main/MainWindow.cpp" line="3738"/>
         <source>Bright Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="193"/>
+        <location filename="../main/MainWindow.cpp" line="200"/>
         <source>Bright Purple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="194"/>
+        <location filename="../main/MainWindow.cpp" line="201"/>
         <source>Bright Orange</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="391"/>
+        <location filename="../main/MainWindow.cpp" line="421"/>
+        <location filename="../main/MainWindow.cpp" line="1216"/>
+        <location filename="../main/MainWindow.cpp" line="1223"/>
+        <source>&amp;Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="410"/>
+        <location filename="../main/MainWindow.cpp" line="1646"/>
+        <source>&amp;Transform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="491"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="493"/>
+        <source>File Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="495"/>
+        <source>File and Session Management</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="500"/>
+        <source>&amp;New Session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="501"/>
+        <source>Ctrl+N</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="510"/>
+        <source>Ctrl+O</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="509"/>
+        <source>&amp;Open...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="511"/>
+        <source>Open a session file, audio file, or layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="549"/>
+        <source>&amp;Save Session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="550"/>
+        <source>Ctrl+S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="559"/>
+        <source>Save Session &amp;As...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="560"/>
+        <source>Ctrl+Shift+S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="520"/>
+        <source>Ctrl+I</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="584"/>
+        <source>&amp;Export Audio File...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="585"/>
+        <source>Export selection as an audio file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="598"/>
+        <source>Import Annotation &amp;Layer...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="599"/>
+        <source>Ctrl+L</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="600"/>
+        <source>Import layer data from an existing file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="608"/>
+        <source>Export layer data to a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="616"/>
+        <source>Export Image File...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="617"/>
+        <source>Export a single pane to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="533"/>
+        <source>Open Lo&amp;cation...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="248"/>
+        <source>Playback Speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="534"/>
+        <source>Ctrl+Shift+O</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="535"/>
+        <source>Open or import a file from a remote URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="590"/>
+        <source>Export Audio Data...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="659"/>
+        <source>&amp;Preferences...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="660"/>
+        <source>Adjust the application preferences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="666"/>
+        <source>&amp;Quit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="667"/>
+        <source>Ctrl+Q</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="679"/>
+        <source>&amp;Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="683"/>
+        <source>Editing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="690"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="691"/>
+        <source>Ctrl+X</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="692"/>
+        <source>Cut the selection from the current layer to the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="700"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="701"/>
+        <source>Ctrl+C</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="702"/>
+        <source>Copy the selection from the current layer to the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="710"/>
+        <source>&amp;Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="711"/>
+        <source>Ctrl+V</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="712"/>
+        <source>Paste from the clipboard to the current layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="719"/>
+        <source>Paste at Playback Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="720"/>
+        <source>Ctrl+Shift+V</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="721"/>
+        <source>Paste from the clipboard to the current layer, placing the first item at the playback position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="728"/>
+        <location filename="../main/MainWindow.cpp" line="2522"/>
+        <source>&amp;Delete Selected Items</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="729"/>
+        <source>Del</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="730"/>
+        <location filename="../main/MainWindow.cpp" line="2523"/>
+        <source>Delete items in current selection from the current layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="740"/>
+        <source>Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="742"/>
+        <source>Select &amp;All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="743"/>
+        <source>Ctrl+A</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="744"/>
+        <source>Select the whole duration of the current session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="751"/>
+        <source>Select &amp;Visible Range</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="752"/>
+        <source>Ctrl+Shift+A</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="753"/>
+        <source>Select the time range corresponding to the current window width</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="759"/>
+        <source>Select to &amp;Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="760"/>
+        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2373"/>
+        <location filename="../main/MainWindow.cpp" line="2453"/>
+        <source>Shift+Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="761"/>
+        <source>Select from the start of the session to the current playback position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="767"/>
+        <source>Select to &amp;End</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="768"/>
+        <source>Shift+Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="769"/>
+        <source>Select from the current playback position to the end of the session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="775"/>
+        <source>C&amp;lear Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="776"/>
+        <source>Esc</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="777"/>
+        <source>Clear the selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="786"/>
+        <source>Tapping Time Instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="788"/>
+        <source>&amp;Insert Instant at Playback Position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="802"/>
+        <source>Enter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="790"/>
+        <source>Insert a new time instant at the current playback position, in a new layer if necessary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="789"/>
+        <source>;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="807"/>
+        <source>Insert Instants at Selection &amp;Boundaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="815"/>
+        <source>Shift+Enter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="809"/>
+        <source>Insert new time instants at the start and end of the current selected regions, in a new layer if necessary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="825"/>
+        <source>Insert Item at Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="827"/>
+        <source>Insert a new note or region item corresponding to the current selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="847"/>
+        <source>Number New Instants with</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="867"/>
+        <source>Cycle size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="888"/>
+        <source>Reset Numbering Counters</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="889"/>
+        <source>Reset to 1 all the counters used for counter-based labelling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="894"/>
+        <source>Set Numbering Counters...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="895"/>
+        <source>Set the counters used for counter-based labelling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="899"/>
+        <source>Renumber Selected Instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="900"/>
+        <source>Renumber the selected instants using the current labelling scheme</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="930"/>
+        <source>Panning and Navigation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="932"/>
+        <source>&amp;View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="934"/>
+        <source>Scroll &amp;Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="935"/>
+        <location filename="../main/MainWindow.cpp" line="2335"/>
+        <location filename="../main/MainWindow.cpp" line="2361"/>
+        <location filename="../main/MainWindow.cpp" line="2391"/>
+        <location filename="../main/MainWindow.cpp" line="2412"/>
+        <location filename="../main/MainWindow.cpp" line="2430"/>
+        <location filename="../main/MainWindow.cpp" line="2447"/>
+        <source>Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="936"/>
+        <source>Scroll the current pane to the left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="942"/>
+        <source>Scroll &amp;Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="943"/>
+        <source>Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="944"/>
+        <source>Scroll the current pane to the right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="950"/>
+        <source>&amp;Jump Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="951"/>
+        <location filename="../main/MainWindow.cpp" line="2365"/>
+        <location filename="../main/MainWindow.cpp" line="2369"/>
+        <source>Ctrl+Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="952"/>
+        <source>Scroll the current pane a big step to the left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="958"/>
+        <source>J&amp;ump Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="959"/>
+        <source>Ctrl+Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="960"/>
+        <source>Scroll the current pane a big step to the right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="966"/>
+        <source>Peek Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="967"/>
+        <source>Alt+Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="968"/>
+        <source>Scroll the current pane to the left without moving the playback cursor or other panes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="974"/>
+        <source>Peek Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="975"/>
+        <source>Alt+Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="976"/>
+        <source>Scroll the current pane to the right without moving the playback cursor or other panes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="984"/>
+        <source>Zoom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="987"/>
+        <source>Zoom &amp;In</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="988"/>
+        <source>Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="989"/>
+        <source>Increase the zoom level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="996"/>
+        <source>Zoom &amp;Out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="997"/>
+        <source>Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="998"/>
+        <source>Decrease the zoom level</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1004"/>
+        <source>Restore &amp;Default Zoom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1005"/>
+        <source>Restore the zoom level to the default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1011"/>
+        <source>Zoom to &amp;Fit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1012"/>
+        <source>F</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1013"/>
+        <source>Zoom to show the whole file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1021"/>
+        <source>Display Features</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1023"/>
+        <source>Show &amp;Centre Line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1024"/>
+        <source>&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1025"/>
+        <source>Show or hide the centre line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1032"/>
+        <source>Toggle All Time Rulers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1045"/>
+        <source>Show &amp;No Overlays</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1046"/>
+        <source>0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1055"/>
+        <source>Show &amp;Minimal Overlays</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1056"/>
+        <source>9</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1066"/>
+        <source>8</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1065"/>
+        <source>Show &amp;All Overlays</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="591"/>
+        <source>Export audio from selection into a data file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="606"/>
+        <source>Export Annotation La&amp;yer...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="607"/>
+        <source>Ctrl+Y</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="622"/>
+        <source>Export SVG File...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="623"/>
+        <source>Export a single pane to a scalable SVG image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="630"/>
+        <source>Browse Recorded Audio Folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="631"/>
+        <source>Open the Recorded Audio folder in the system file browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="808"/>
+        <source>Shift+;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="826"/>
+        <source>Ctrl+Shift+;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="833"/>
+        <source>Ctrl+Shift+Enter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="838"/>
+        <source>Ctrl+Shift+Return</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="908"/>
+        <source>Subdivide Selected Instants...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="909"/>
+        <source>Add new instants at regular intervals between the selected instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="914"/>
+        <source>Winnow Selected Instants...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="915"/>
+        <source>Remove subdivisions, leaving only every Nth instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1033"/>
+        <source>#</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1034"/>
+        <source>Show or hide all time rulers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1047"/>
+        <source>Hide times, layer names, and scale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1057"/>
+        <source>Show times and basic scale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1067"/>
+        <source>Show times, layer names, and scale</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1077"/>
+        <source>Show &amp;Zoom Wheels</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../main/MainWindow.cpp" line="1078"/>
-        <location filename="../main/MainWindow.cpp" line="1085"/>
-        <source>&amp;Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="380"/>
-        <location filename="../main/MainWindow.cpp" line="1486"/>
-        <source>&amp;Transform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="461"/>
-        <source>&amp;File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="463"/>
-        <source>File Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="465"/>
-        <source>File and Session Management</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="470"/>
-        <source>&amp;New Session</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="471"/>
-        <source>Ctrl+N</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="480"/>
-        <source>Ctrl+O</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="479"/>
-        <source>&amp;Open...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="481"/>
-        <source>Open a session file, audio file, or layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="519"/>
-        <source>&amp;Save Session</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="520"/>
-        <source>Ctrl+S</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="529"/>
-        <source>Save Session &amp;As...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="530"/>
-        <source>Ctrl+Shift+S</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="490"/>
-        <source>Ctrl+I</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="554"/>
-        <source>&amp;Export Audio File...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="555"/>
-        <source>Export selection as an audio file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="568"/>
-        <source>Import Annotation &amp;Layer...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="569"/>
-        <source>Ctrl+L</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="570"/>
-        <source>Import layer data from an existing file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="578"/>
-        <source>Export layer data to a file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="586"/>
-        <source>Export Image File...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="587"/>
-        <source>Export a single pane to an image file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="503"/>
-        <source>Open Lo&amp;cation...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="247"/>
-        <source>Playback Speed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="504"/>
-        <source>Ctrl+Shift+O</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="505"/>
-        <source>Open or import a file from a remote URL</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="560"/>
-        <source>Export Audio Data...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="623"/>
-        <source>&amp;Preferences...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="624"/>
-        <source>Adjust the application preferences</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="630"/>
-        <source>&amp;Quit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="631"/>
-        <source>Ctrl+Q</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="643"/>
-        <source>&amp;Edit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="647"/>
-        <source>Editing</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="654"/>
-        <source>Cu&amp;t</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="655"/>
-        <source>Ctrl+X</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="656"/>
-        <source>Cut the selection from the current layer to the clipboard</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="664"/>
-        <source>&amp;Copy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="665"/>
-        <source>Ctrl+C</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="666"/>
-        <source>Copy the selection from the current layer to the clipboard</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="674"/>
-        <source>&amp;Paste</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="675"/>
-        <source>Ctrl+V</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="676"/>
-        <source>Paste from the clipboard to the current layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="683"/>
-        <source>Paste at Playback Position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="684"/>
-        <source>Ctrl+Shift+V</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="685"/>
-        <source>Paste from the clipboard to the current layer, placing the first item at the playback position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="692"/>
+        <source>Z</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1079"/>
+        <source>Show thumbwheels for zooming horizontally and vertically</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1086"/>
+        <source>Show Property Bo&amp;xes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1087"/>
+        <source>X</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1088"/>
+        <source>Show the layer property boxes at the side of the main window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1095"/>
+        <source>Show Status &amp;Bar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1096"/>
+        <source>Show context help information in the status bar at the bottom of the window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1113"/>
+        <source>Show La&amp;yer Summary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1114"/>
+        <source>Y</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1115"/>
+        <source>Open a window displaying the hierarchy of panes and layers in this session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1120"/>
+        <source>Show Acti&amp;vity Log</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1121"/>
+        <source>Open a window listing interactions and other events</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1125"/>
+        <source>Show &amp;Unit Converter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1126"/>
+        <source>Open a window of pitch and timing conversion utilities</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1135"/>
+        <source>Go Full-Screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1136"/>
+        <source>F11</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1137"/>
+        <source>Expand the pane area to the whole screen</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1208"/>
+        <source>&amp;Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1232"/>
+        <source>Managing Panes and Layers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1234"/>
+        <source>Add &amp;New Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1235"/>
+        <source>N</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1236"/>
+        <source>Add a new pane containing only a time ruler</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1260"/>
+        <source>Add New %1 Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1261"/>
+        <source>Add a new empty layer of type %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1267"/>
+        <source>T</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1326"/>
+        <source>Add &amp;Waveform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1156"/>
+        <source>W</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1328"/>
+        <source>Add a new pane showing a waveform view</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1158"/>
+        <source>Shift+W</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1330"/>
+        <source>Add a new layer showing a waveform view</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1337"/>
+        <source>Add Spectro&amp;gram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1164"/>
+        <source>G</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1339"/>
+        <source>Add a new pane showing a spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1166"/>
+        <source>Shift+G</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1341"/>
+        <source>Add a new layer showing a spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1347"/>
+        <source>Add &amp;Melodic Range Spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1172"/>
+        <source>M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1349"/>
+        <source>Add a new pane showing a spectrogram set up for an overview of note pitches</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1174"/>
+        <source>Shift+M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1351"/>
+        <source>Add a new layer showing a spectrogram set up for an overview of note pitches</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1357"/>
+        <source>Add Pea&amp;k Frequency Spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1180"/>
+        <source>K</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1359"/>
+        <source>Add a new pane showing a spectrogram set up for tracking frequencies</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1182"/>
+        <source>Shift+K</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1361"/>
+        <source>Add a new layer showing a spectrogram set up for tracking frequencies</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1367"/>
+        <source>Add Spectr&amp;um</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1188"/>
+        <source>U</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1369"/>
+        <source>Add a new pane showing a frequency spectrum</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1190"/>
+        <source>Shift+U</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1371"/>
+        <source>Add a new layer showing a frequency spectrum</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1441"/>
+        <source>&amp;All Channels Mixed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1443"/>
+        <source>&amp;All Channels</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1446"/>
+        <source>Channel &amp;%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1450"/>
+        <location filename="../main/MainWindow.cpp" line="3710"/>
+        <source>%1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1509"/>
+        <source>Switch to Previous Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1510"/>
+        <source>[</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1511"/>
+        <source>Make the next pane up in the pane stack current</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1517"/>
+        <source>Switch to Next Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1518"/>
+        <source>]</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1519"/>
+        <source>Make the next pane down in the pane stack current</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1527"/>
+        <source>&amp;Delete Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1528"/>
+        <source>Ctrl+Shift+D</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1529"/>
+        <source>Delete the currently active pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1537"/>
+        <source>Add &amp;Time Ruler</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1538"/>
+        <source>Add a new layer showing a time ruler</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1546"/>
+        <source>Add &amp;Existing Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1550"/>
+        <source>Add S&amp;lice of Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1558"/>
+        <source>Switch to Previous Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1559"/>
+        <source>{</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1560"/>
+        <source>Make the previous layer in the pane current</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1566"/>
+        <source>Switch to Next Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1567"/>
+        <source>}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1568"/>
+        <source>Make the next layer in the pane current</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1577"/>
+        <source>&amp;Rename Layer...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1578"/>
+        <source>R</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1579"/>
+        <source>Rename the currently active layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1585"/>
+        <source>Edit Layer Data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1586"/>
+        <source>E</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1587"/>
+        <source>Edit the currently active layer as a data grid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1593"/>
+        <source>&amp;Delete Layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1594"/>
+        <source>Ctrl+D</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1595"/>
+        <source>Delete the currently active layer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1669"/>
+        <source>&amp;Recent Transforms</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1686"/>
+        <source>%1 by Category</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1701"/>
+        <location filename="../main/MainWindow.cpp" line="1789"/>
+        <source>Unclassified</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1732"/>
+        <source>%1 by Plugin Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1740"/>
+        <source>%1 by Maker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1754"/>
+        <location filename="../main/MainWindow.cpp" line="1792"/>
+        <source>Unknown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1755"/>
+        <location filename="../main/MainWindow.cpp" line="1793"/>
+        <source> [\(&lt;].*$</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1808"/>
+        <location filename="../main/MainWindow.cpp" line="1834"/>
+        <source>%1...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1873"/>
+        <source>Find a Transform...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1874"/>
+        <source>Search for a transform from the installed plugins, by name or description</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1875"/>
+        <source>Ctrl+M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1888"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1891"/>
+        <source>Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1898"/>
+        <source>&amp;Help Reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1899"/>
+        <source>F1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1905"/>
+        <source>&amp;Key and Mouse Reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1906"/>
+        <source>F2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1917"/>
+        <source>What&apos;s &amp;New?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1918"/>
+        <source>Show changes in this release of %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1940"/>
+        <source>Ctrl+R</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1942"/>
+        <source>Re-open</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1944"/>
+        <source>Re-open the current or most recently opened file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1955"/>
+        <source>Standard Waveform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1991"/>
+        <source>Choose Default Template...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2016"/>
+        <source>Ctrl+T</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2018"/>
+        <source>Repeat Transform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2020"/>
+        <source>Re-select the most recently run transform</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2110"/>
+        <source>Playback and Transport Controls</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2114"/>
+        <source>Play&amp;back</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2117"/>
+        <source>Playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2119"/>
+        <source>Playback Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2122"/>
+        <source>Rewind to Start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2123"/>
+        <source>Home</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2124"/>
+        <source>Rewind to the start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2128"/>
+        <location filename="../main/MainWindow.cpp" line="2540"/>
+        <location filename="../main/MainWindow.cpp" line="2541"/>
+        <source>Rewind</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2129"/>
+        <source>PgUp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2130"/>
+        <source>Rewind to the previous time instant or time ruler notch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2134"/>
+        <source>Rewind to Similar Point</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2135"/>
+        <source>Shift+PgUp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2136"/>
+        <source>Rewind to the previous similarly valued time instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2141"/>
+        <source>Play / Pause</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2149"/>
+        <source>Space</source>
+        <extracomment>This text is a shortcut label referring to the space-bar on the keyboard. It probably should not be translated, and certainly should not be translated as if referring to an empty void or to the extra-terrestrial universe.</extracomment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2151"/>
+        <source>Start or stop playback from the current position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2160"/>
+        <location filename="../main/MainWindow.cpp" line="2538"/>
+        <source>Fast Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2161"/>
+        <source>PgDown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2162"/>
+        <source>Fast-forward to the next time instant or time ruler notch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2166"/>
+        <source>Fast Forward to Similar Point</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2167"/>
+        <source>Shift+PgDown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2168"/>
+        <source>Fast-forward to the next similarly valued time instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2173"/>
+        <source>Fast Forward to End</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2174"/>
+        <source>End</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2175"/>
+        <source>Fast-forward to the end</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2180"/>
+        <source>Record</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2182"/>
+        <source>Ctrl+Space</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2183"/>
+        <source>Record a new audio file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2190"/>
+        <source>Play Mode Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2193"/>
+        <source>Constrain Playback to Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2196"/>
+        <source>s</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2197"/>
+        <source>Constrain playback to the selected regions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2204"/>
+        <source>Loop Playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2207"/>
+        <source>l</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2208"/>
+        <source>Loop playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2215"/>
+        <source>Solo Current Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2219"/>
+        <source>o</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2220"/>
+        <source>Solo the current pane during playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2229"/>
+        <source>Align File Timelines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2232"/>
+        <source>Treat multiple audio files as versions of the same work, and align their timelines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2287"/>
+        <source>Speed Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2288"/>
+        <source>Ctrl+PgUp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2289"/>
+        <source>Time-stretch playback to speed it up without changing pitch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2293"/>
+        <source>Slow Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2294"/>
+        <source>Ctrl+PgDown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2295"/>
+        <source>Time-stretch playback to slow it down without changing pitch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2299"/>
+        <source>Restore Normal Speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2300"/>
+        <source>Ctrl+Home</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2301"/>
+        <source>Restore non-time-stretched playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2313"/>
+        <source>Edit Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2319"/>
+        <location filename="../main/MainWindow.cpp" line="2347"/>
+        <location filename="../main/MainWindow.cpp" line="2376"/>
+        <location filename="../main/MainWindow.cpp" line="2397"/>
+        <location filename="../main/MainWindow.cpp" line="2415"/>
+        <location filename="../main/MainWindow.cpp" line="2433"/>
+        <source>Tool Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3124"/>
+        <source>Export the whole pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3125"/>
+        <source>Export the visible area only</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3135"/>
+        <source>Which region of the current pane do you want to export as a scalable SVG image?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3163"/>
+        <source>Failed to save SVG file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3164"/>
+        <source>Failed to save SVG file %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4030"/>
+        <source>Failed to query transform attributes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4031"/>
+        <source>&lt;b&gt;Failed to query transform attributes&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4102"/>
+        <source>Multiplexed audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4124"/>
+        <source>Transform failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4125"/>
+        <source>&lt;b&gt;Failed to run transform&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4242"/>
+        <source>Playback speed: %1% (%2x slower)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4248"/>
+        <source>Playback speed: %1% (%2x faster)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4720"/>
+        <source>Subdivide instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4721"/>
+        <source>Number of subdivisions:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4742"/>
+        <source>Winnow instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4743"/>
+        <source>Remove all instants apart from multiples of:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4769"/>
+        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4776"/>
+        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4832"/>
+        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment:&lt;p&gt;%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4917"/>
+        <source>Adjust the master playback level and pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5038"/>
+        <source>With Qt v%1 &amp;copy; The Qt Company</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5096"/>
+        <source>&lt;br&gt;With Rubber Band Library v%1 &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5098"/>
+        <source>&lt;br&gt;With Rubber Band Library &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5101"/>
+        <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam and QMUL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5102"/>
+        <source>&lt;br&gt;With Piper Vamp protocol bridge &amp;copy; QMUL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5111"/>
+        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5112"/>
+        <source>&lt;br&gt;With Cap&apos;n Proto serialisation &amp;copy; Sandstorm Development Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5126"/>
+        <source>Russian UI translation contributed by Alexandre Prokoudine.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5128"/>
+        <source>Czech UI translation contributed by Pavel Fric.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5215"/>
+        <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2316"/>
+        <source>Tools Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2321"/>
+        <location filename="../main/MainWindow.cpp" line="2325"/>
+        <location filename="../main/MainWindow.cpp" line="2335"/>
+        <source>Navigate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2324"/>
+        <source>1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2349"/>
+        <location filename="../main/MainWindow.cpp" line="2361"/>
+        <source>Select</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2351"/>
+        <source>2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2352"/>
+        <source>Select ranges</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2344"/>
+        <location filename="../main/MainWindow.cpp" line="2378"/>
+        <location filename="../main/MainWindow.cpp" line="2394"/>
+        <source>Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2333"/>
+        <source>Navigate Tool Mouse Actions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2336"/>
+        <source>Click left button and drag to move around</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2453"/>
+        <source>Zoom to Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2339"/>
+        <location filename="../main/MainWindow.cpp" line="2454"/>
+        <source>Shift-click left button and drag to zoom to a rectangular area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2341"/>
+        <source>Relocate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2341"/>
+        <location filename="../main/MainWindow.cpp" line="2344"/>
+        <location filename="../main/MainWindow.cpp" line="2394"/>
+        <location filename="../main/MainWindow.cpp" line="2450"/>
+        <source>Double-Click Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../main/MainWindow.cpp" line="2342"/>
-        <source>&amp;Delete Selected Items</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="693"/>
-        <source>Del</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="694"/>
-        <location filename="../main/MainWindow.cpp" line="2343"/>
-        <source>Delete items in current selection from the current layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="704"/>
-        <source>Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="706"/>
-        <source>Select &amp;All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="707"/>
-        <source>Ctrl+A</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="708"/>
-        <source>Select the whole duration of the current session</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="715"/>
-        <source>Select &amp;Visible Range</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="716"/>
-        <source>Ctrl+Shift+A</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="717"/>
-        <source>Select the time range corresponding to the current window width</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="723"/>
-        <source>Select to &amp;Start</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="724"/>
-        <location filename="../main/MainWindow.cpp" line="2158"/>
-        <location filename="../main/MainWindow.cpp" line="2193"/>
-        <location filename="../main/MainWindow.cpp" line="2273"/>
-        <source>Shift+Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="725"/>
-        <source>Select from the start of the session to the current playback position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="731"/>
-        <source>Select to &amp;End</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="732"/>
-        <source>Shift+Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="733"/>
-        <source>Select from the current playback position to the end of the session</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="739"/>
-        <source>C&amp;lear Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="740"/>
-        <source>Esc</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="741"/>
-        <source>Clear the selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="750"/>
-        <source>Tapping Time Instants</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="752"/>
-        <source>&amp;Insert Instant at Playback Position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="753"/>
-        <source>Enter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="754"/>
-        <source>Insert a new time instant at the current playback position, in a new layer if necessary</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="761"/>
-        <source>;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="766"/>
-        <source>Insert Instants at Selection &amp;Boundaries</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="767"/>
-        <source>Shift+Enter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="768"/>
-        <source>Insert new time instants at the start and end of the current selected regions, in a new layer if necessary</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="774"/>
-        <source>Insert Item at Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="776"/>
-        <source>Insert a new note or region item corresponding to the current selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="784"/>
-        <source>Number New Instants with</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="804"/>
-        <source>Cycle size</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="825"/>
-        <source>Reset Numbering Counters</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="826"/>
-        <source>Reset to 1 all the counters used for counter-based labelling</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="831"/>
-        <source>Set Numbering Counters...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="832"/>
-        <source>Set the counters used for counter-based labelling</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="836"/>
-        <source>Renumber Selected Instants</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="837"/>
-        <source>Renumber the selected instants using the current labelling scheme</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="853"/>
-        <source>Panning and Navigation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="855"/>
-        <source>&amp;View</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="857"/>
-        <source>Scroll &amp;Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="858"/>
-        <location filename="../main/MainWindow.cpp" line="2155"/>
-        <location filename="../main/MainWindow.cpp" line="2181"/>
-        <location filename="../main/MainWindow.cpp" line="2211"/>
-        <location filename="../main/MainWindow.cpp" line="2232"/>
-        <location filename="../main/MainWindow.cpp" line="2250"/>
-        <location filename="../main/MainWindow.cpp" line="2267"/>
-        <source>Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="859"/>
-        <source>Scroll the current pane to the left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="865"/>
-        <source>Scroll &amp;Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="866"/>
-        <source>Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="867"/>
-        <source>Scroll the current pane to the right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="873"/>
-        <source>&amp;Jump Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="874"/>
-        <location filename="../main/MainWindow.cpp" line="2185"/>
-        <location filename="../main/MainWindow.cpp" line="2189"/>
-        <source>Ctrl+Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="875"/>
-        <source>Scroll the current pane a big step to the left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="881"/>
-        <source>J&amp;ump Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="882"/>
-        <source>Ctrl+Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="883"/>
-        <source>Scroll the current pane a big step to the right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="889"/>
-        <source>Peek Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="890"/>
-        <source>Alt+Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="891"/>
-        <source>Scroll the current pane to the left without moving the playback cursor or other panes</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="897"/>
-        <source>Peek Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="898"/>
-        <source>Alt+Right</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="899"/>
-        <source>Scroll the current pane to the right without moving the playback cursor or other panes</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="907"/>
-        <source>Zoom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="910"/>
-        <source>Zoom &amp;In</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="911"/>
-        <source>Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="912"/>
-        <source>Increase the zoom level</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="919"/>
-        <source>Zoom &amp;Out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="920"/>
-        <source>Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="921"/>
-        <source>Decrease the zoom level</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="927"/>
-        <source>Restore &amp;Default Zoom</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="928"/>
-        <source>Restore the zoom level to the default</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="934"/>
-        <source>Zoom to &amp;Fit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="935"/>
-        <source>F</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="936"/>
-        <source>Zoom to show the whole file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="944"/>
-        <source>Display Features</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="946"/>
-        <source>Show &amp;Centre Line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="947"/>
-        <source>&apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="948"/>
-        <source>Show or hide the centre line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="955"/>
-        <source>Toggle All Time Rulers</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="968"/>
-        <source>Show &amp;No Overlays</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="969"/>
-        <source>0</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="978"/>
-        <source>Show &amp;Minimal Overlays</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="979"/>
-        <source>9</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="989"/>
-        <source>8</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="988"/>
-        <source>Show &amp;All Overlays</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="561"/>
-        <source>Export audio from selection into a data file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="576"/>
-        <source>Export Annotation La&amp;yer...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="577"/>
-        <source>Ctrl+Y</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="594"/>
-        <source>Browse Recorded Audio Folder</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="595"/>
-        <source>Open the Recorded Audio folder in the system file browser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="775"/>
-        <source>Ctrl+Shift+Return</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="956"/>
-        <source>#</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="957"/>
-        <source>Show or hide all time rulers</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="970"/>
-        <source>Hide times, layer names, and scale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="980"/>
-        <source>Show times and basic scale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="990"/>
-        <source>Show times, layer names, and scale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1000"/>
-        <source>Show &amp;Zoom Wheels</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1001"/>
-        <source>Z</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1002"/>
-        <source>Show thumbwheels for zooming horizontally and vertically</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1009"/>
-        <source>Show Property Bo&amp;xes</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1010"/>
-        <source>X</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1011"/>
-        <source>Show the layer property boxes at the side of the main window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1018"/>
-        <source>Show Status &amp;Bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1019"/>
-        <source>Show context help information in the status bar at the bottom of the window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1036"/>
-        <source>Show La&amp;yer Summary</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1037"/>
-        <source>Y</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1038"/>
-        <source>Open a window displaying the hierarchy of panes and layers in this session</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1043"/>
-        <source>Show Acti&amp;vity Log</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1044"/>
-        <source>Open a window listing interactions and other events</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1048"/>
-        <source>Show &amp;Unit Converter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1049"/>
-        <source>Open a window of pitch and timing conversion utilities</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1055"/>
-        <source>Go Full-Screen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1056"/>
-        <source>F11</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1057"/>
-        <source>Expand the pane area to the whole screen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1070"/>
-        <source>&amp;Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1094"/>
-        <source>Managing Panes and Layers</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1096"/>
-        <source>Add &amp;New Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1097"/>
-        <source>N</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1098"/>
-        <source>Add a new pane containing only a time ruler</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1124"/>
-        <source>Add New %1 Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1125"/>
-        <source>Add a new empty layer of type %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1131"/>
-        <source>T</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1186"/>
-        <source>Add &amp;Waveform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1188"/>
-        <source>W</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1189"/>
-        <source>Add a new pane showing a waveform view</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1191"/>
-        <source>Shift+W</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1192"/>
-        <source>Add a new layer showing a waveform view</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1199"/>
-        <source>Add Spectro&amp;gram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1201"/>
-        <source>G</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1202"/>
-        <source>Add a new pane showing a spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1204"/>
-        <source>Shift+G</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1205"/>
-        <source>Add a new layer showing a spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1211"/>
-        <source>Add &amp;Melodic Range Spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1213"/>
-        <source>M</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1214"/>
-        <source>Add a new pane showing a spectrogram set up for an overview of note pitches</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1216"/>
-        <source>Shift+M</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1217"/>
-        <source>Add a new layer showing a spectrogram set up for an overview of note pitches</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1223"/>
-        <source>Add Pea&amp;k Frequency Spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1225"/>
-        <source>K</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1226"/>
-        <source>Add a new pane showing a spectrogram set up for tracking frequencies</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1228"/>
-        <source>Shift+K</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1229"/>
-        <source>Add a new layer showing a spectrogram set up for tracking frequencies</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1235"/>
-        <source>Add Spectr&amp;um</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1237"/>
-        <source>U</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1238"/>
-        <source>Add a new pane showing a frequency spectrum</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1240"/>
-        <source>Shift+U</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1241"/>
-        <source>Add a new layer showing a frequency spectrum</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1311"/>
-        <source>&amp;All Channels Mixed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1313"/>
-        <source>&amp;All Channels</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1316"/>
-        <source>Channel &amp;%1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1320"/>
-        <location filename="../main/MainWindow.cpp" line="3447"/>
-        <source>%1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1379"/>
-        <source>Switch to Previous Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1380"/>
-        <source>[</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1381"/>
-        <source>Make the next pane up in the pane stack current</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1387"/>
-        <source>Switch to Next Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1388"/>
-        <source>]</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1389"/>
-        <source>Make the next pane down in the pane stack current</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1397"/>
-        <source>&amp;Delete Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1398"/>
-        <source>Ctrl+Shift+D</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1399"/>
-        <source>Delete the currently active pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1407"/>
-        <source>Add &amp;Time Ruler</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1408"/>
-        <source>Add a new layer showing a time ruler</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1416"/>
-        <source>Add &amp;Existing Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1420"/>
-        <source>Add S&amp;lice of Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1428"/>
-        <source>Switch to Previous Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1429"/>
-        <source>{</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1430"/>
-        <source>Make the previous layer in the pane current</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1436"/>
-        <source>Switch to Next Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1437"/>
-        <source>}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1438"/>
-        <source>Make the next layer in the pane current</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1447"/>
-        <source>&amp;Rename Layer...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1448"/>
-        <source>R</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1449"/>
-        <source>Rename the currently active layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1455"/>
-        <source>Edit Layer Data</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1456"/>
-        <source>E</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1457"/>
-        <source>Edit the currently active layer as a data grid</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1463"/>
-        <source>&amp;Delete Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1464"/>
-        <source>Ctrl+D</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1465"/>
-        <source>Delete the currently active layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1504"/>
-        <source>&amp;Recent Transforms</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1521"/>
-        <source>%1 by Category</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1536"/>
-        <location filename="../main/MainWindow.cpp" line="1624"/>
-        <source>Unclassified</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1567"/>
-        <source>%1 by Plugin Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1575"/>
-        <source>%1 by Maker</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1589"/>
-        <location filename="../main/MainWindow.cpp" line="1627"/>
-        <source>Unknown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1590"/>
-        <location filename="../main/MainWindow.cpp" line="1628"/>
-        <source> [\(&lt;].*$</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1643"/>
-        <location filename="../main/MainWindow.cpp" line="1669"/>
-        <source>%1...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1708"/>
-        <source>Find a Transform...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1709"/>
-        <source>Search for a transform from the installed plugins, by name or description</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1710"/>
-        <source>Ctrl+M</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1723"/>
-        <source>&amp;Help</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1726"/>
-        <source>Help</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1733"/>
-        <source>&amp;Help Reference</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1734"/>
-        <source>F1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1740"/>
-        <source>&amp;Key and Mouse Reference</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1741"/>
-        <source>F2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1767"/>
-        <source>Ctrl+R</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1769"/>
-        <source>Re-open</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1771"/>
-        <source>Re-open the current or most recently opened file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1782"/>
-        <source>Standard Waveform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1818"/>
-        <source>Choose Default Template...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1843"/>
-        <source>Ctrl+T</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1845"/>
-        <source>Repeat Transform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1847"/>
-        <source>Re-select the most recently run transform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1937"/>
-        <source>Playback and Transport Controls</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1941"/>
-        <source>Play&amp;back</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1944"/>
-        <source>Playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1946"/>
-        <source>Playback Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1949"/>
-        <source>Rewind to Start</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1950"/>
-        <source>Home</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1951"/>
-        <source>Rewind to the start</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1955"/>
-        <location filename="../main/MainWindow.cpp" line="2360"/>
-        <location filename="../main/MainWindow.cpp" line="2361"/>
-        <source>Rewind</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1956"/>
-        <source>PgUp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1957"/>
-        <source>Rewind to the previous time instant or time ruler notch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1961"/>
-        <source>Rewind to Similar Point</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1962"/>
-        <source>Shift+PgUp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1963"/>
-        <source>Rewind to the previous similarly valued time instant</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1968"/>
-        <source>Play / Pause</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1970"/>
-        <source>Space</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1971"/>
-        <source>Start or stop playback from the current position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1980"/>
-        <location filename="../main/MainWindow.cpp" line="2358"/>
-        <source>Fast Forward</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1981"/>
-        <source>PgDown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1982"/>
-        <source>Fast-forward to the next time instant or time ruler notch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1986"/>
-        <source>Fast Forward to Similar Point</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1987"/>
-        <source>Shift+PgDown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1988"/>
-        <source>Fast-forward to the next similarly valued time instant</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1993"/>
-        <source>Fast Forward to End</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1994"/>
-        <source>End</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1995"/>
-        <source>Fast-forward to the end</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2000"/>
-        <source>Record</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2002"/>
-        <source>Ctrl+Space</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2003"/>
-        <source>Record a new audio file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2010"/>
-        <source>Play Mode Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2013"/>
-        <source>Constrain Playback to Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2016"/>
-        <source>s</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2017"/>
-        <source>Constrain playback to the selected regions</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2024"/>
-        <source>Loop Playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2027"/>
-        <source>l</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2028"/>
-        <source>Loop playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2035"/>
-        <source>Solo Current Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2039"/>
-        <source>o</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2040"/>
-        <source>Solo the current pane during playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2049"/>
-        <source>Align File Timelines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2052"/>
-        <source>Treat multiple audio files as versions of the same work, and align their timelines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2107"/>
-        <source>Speed Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2108"/>
-        <source>Ctrl+PgUp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2109"/>
-        <source>Time-stretch playback to speed it up without changing pitch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2113"/>
-        <source>Slow Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2114"/>
-        <source>Ctrl+PgDown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2115"/>
-        <source>Time-stretch playback to slow it down without changing pitch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2119"/>
-        <source>Restore Normal Speed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2120"/>
-        <source>Ctrl+Home</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2121"/>
-        <source>Restore non-time-stretched playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2133"/>
-        <source>Edit Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2139"/>
-        <location filename="../main/MainWindow.cpp" line="2167"/>
-        <location filename="../main/MainWindow.cpp" line="2196"/>
-        <location filename="../main/MainWindow.cpp" line="2217"/>
-        <location filename="../main/MainWindow.cpp" line="2235"/>
-        <location filename="../main/MainWindow.cpp" line="2253"/>
-        <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3937"/>
-        <source>Playback speed: %1% (%2x slower)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3943"/>
-        <source>Playback speed: %1% (%2x faster)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4377"/>
-        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4384"/>
-        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4697"/>
-        <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2136"/>
-        <source>Tools Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2141"/>
-        <location filename="../main/MainWindow.cpp" line="2145"/>
-        <location filename="../main/MainWindow.cpp" line="2155"/>
-        <source>Navigate</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2144"/>
-        <source>1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2169"/>
-        <location filename="../main/MainWindow.cpp" line="2181"/>
-        <source>Select</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2171"/>
-        <source>2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2172"/>
-        <source>Select ranges</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2164"/>
-        <location filename="../main/MainWindow.cpp" line="2198"/>
-        <location filename="../main/MainWindow.cpp" line="2214"/>
-        <source>Edit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2153"/>
-        <source>Navigate Tool Mouse Actions</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2156"/>
-        <source>Click left button and drag to move around</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2158"/>
-        <location filename="../main/MainWindow.cpp" line="2273"/>
-        <source>Zoom to Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2159"/>
-        <location filename="../main/MainWindow.cpp" line="2274"/>
-        <source>Shift-click left button and drag to zoom to a rectangular area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2161"/>
-        <source>Relocate</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2161"/>
-        <location filename="../main/MainWindow.cpp" line="2164"/>
-        <location filename="../main/MainWindow.cpp" line="2214"/>
-        <location filename="../main/MainWindow.cpp" line="2270"/>
-        <source>Double-Click Left</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2162"/>
         <source>Double-click left button to jump to clicked location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2165"/>
-        <location filename="../main/MainWindow.cpp" line="2215"/>
+        <location filename="../main/MainWindow.cpp" line="2345"/>
+        <location filename="../main/MainWindow.cpp" line="2395"/>
         <source>Double-click left button on an item to edit it</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2179"/>
+        <location filename="../main/MainWindow.cpp" line="2359"/>
         <source>Select Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2182"/>
+        <location filename="../main/MainWindow.cpp" line="2362"/>
         <source>Click left button and drag to select region; drag region edge to resize</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2185"/>
-        <location filename="../main/MainWindow.cpp" line="2189"/>
+        <location filename="../main/MainWindow.cpp" line="2365"/>
+        <location filename="../main/MainWindow.cpp" line="2369"/>
         <source>Multi Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2186"/>
+        <location filename="../main/MainWindow.cpp" line="2366"/>
         <source>Cmd-click left button and drag to select an additional region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2190"/>
+        <location filename="../main/MainWindow.cpp" line="2370"/>
         <source>Ctrl-click left button and drag to select an additional region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2193"/>
+        <location filename="../main/MainWindow.cpp" line="2373"/>
         <source>Fine Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2194"/>
+        <location filename="../main/MainWindow.cpp" line="2374"/>
         <source>Shift-click left button and drag to select without snapping to items or grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2200"/>
+        <location filename="../main/MainWindow.cpp" line="2380"/>
         <source>3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2201"/>
+        <location filename="../main/MainWindow.cpp" line="2381"/>
         <source>Edit items in layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2209"/>
+        <location filename="../main/MainWindow.cpp" line="2389"/>
         <source>Edit Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2211"/>
+        <location filename="../main/MainWindow.cpp" line="2391"/>
         <source>Move</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2212"/>
+        <location filename="../main/MainWindow.cpp" line="2392"/>
         <source>Click left button on an item or selected region and drag to move</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2219"/>
-        <location filename="../main/MainWindow.cpp" line="2232"/>
+        <location filename="../main/MainWindow.cpp" line="2399"/>
+        <location filename="../main/MainWindow.cpp" line="2412"/>
         <source>Draw</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2221"/>
+        <location filename="../main/MainWindow.cpp" line="2401"/>
         <source>4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2222"/>
+        <location filename="../main/MainWindow.cpp" line="2402"/>
         <source>Draw new items in layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2230"/>
+        <location filename="../main/MainWindow.cpp" line="2410"/>
         <source>Draw Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2233"/>
+        <location filename="../main/MainWindow.cpp" line="2413"/>
         <source>Click left button and drag to create new item</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2237"/>
-        <location filename="../main/MainWindow.cpp" line="2250"/>
+        <location filename="../main/MainWindow.cpp" line="2417"/>
+        <location filename="../main/MainWindow.cpp" line="2430"/>
         <source>Erase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2239"/>
+        <location filename="../main/MainWindow.cpp" line="2419"/>
         <source>5</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2240"/>
+        <location filename="../main/MainWindow.cpp" line="2420"/>
         <source>Erase items from layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2248"/>
+        <location filename="../main/MainWindow.cpp" line="2428"/>
         <source>Erase Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2251"/>
+        <location filename="../main/MainWindow.cpp" line="2431"/>
         <source>Click left button on an item to remove it from the layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2254"/>
+        <location filename="../main/MainWindow.cpp" line="2434"/>
         <source>Measure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2256"/>
+        <location filename="../main/MainWindow.cpp" line="2436"/>
         <source>6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2257"/>
+        <location filename="../main/MainWindow.cpp" line="2437"/>
         <source>Make measurements in layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2265"/>
+        <location filename="../main/MainWindow.cpp" line="2445"/>
         <source>Measure Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2267"/>
+        <location filename="../main/MainWindow.cpp" line="2447"/>
         <source>Measure Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2268"/>
+        <location filename="../main/MainWindow.cpp" line="2448"/>
         <source>Click left button and drag to measure a rectangular area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2270"/>
+        <location filename="../main/MainWindow.cpp" line="2450"/>
         <source>Measure Item</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2271"/>
+        <location filename="../main/MainWindow.cpp" line="2451"/>
         <source>Click left button and drag to measure extents of an item or shape</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2518"/>
         <source>&amp;Delete Current Measurement</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2339"/>
+        <location filename="../main/MainWindow.cpp" line="2519"/>
         <source>Delete the measurement currently under the mouse pointer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2348"/>
+        <location filename="../main/MainWindow.cpp" line="2528"/>
         <source>Fast Forward to Next Instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2349"/>
+        <location filename="../main/MainWindow.cpp" line="2529"/>
         <source>Fast forward to the next time instant in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2350"/>
+        <location filename="../main/MainWindow.cpp" line="2530"/>
         <source>Rewind to Previous Instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2351"/>
+        <location filename="../main/MainWindow.cpp" line="2531"/>
         <source>Rewind to the previous time instant in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2353"/>
+        <location filename="../main/MainWindow.cpp" line="2533"/>
         <source>Fast Forward to Next Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2354"/>
+        <location filename="../main/MainWindow.cpp" line="2534"/>
         <source>Fast forward to the next point in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2355"/>
+        <location filename="../main/MainWindow.cpp" line="2535"/>
         <source>Rewind to Previous Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2356"/>
+        <location filename="../main/MainWindow.cpp" line="2536"/>
         <source>Rewind to the previous point in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2359"/>
+        <location filename="../main/MainWindow.cpp" line="2539"/>
         <source>Fast forward</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2370"/>
+        <location filename="../main/MainWindow.cpp" line="2550"/>
         <source>No audio file loaded.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2381"/>
+        <location filename="../main/MainWindow.cpp" line="2563"/>
         <source>%1Hz (resampling to %2Hz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2452"/>
-        <location filename="../main/MainWindow.cpp" line="2466"/>
-        <location filename="../main/MainWindow.cpp" line="2480"/>
-        <location filename="../main/MainWindow.cpp" line="2717"/>
-        <location filename="../main/MainWindow.cpp" line="2722"/>
-        <location filename="../main/MainWindow.cpp" line="3031"/>
-        <location filename="../main/MainWindow.cpp" line="3035"/>
+        <location filename="../main/MainWindow.cpp" line="2634"/>
+        <location filename="../main/MainWindow.cpp" line="2648"/>
+        <location filename="../main/MainWindow.cpp" line="2662"/>
+        <location filename="../main/MainWindow.cpp" line="2907"/>
+        <location filename="../main/MainWindow.cpp" line="2912"/>
+        <location filename="../main/MainWindow.cpp" line="3287"/>
+        <location filename="../main/MainWindow.cpp" line="3291"/>
         <source>Failed to open file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2453"/>
-        <location filename="../main/MainWindow.cpp" line="2467"/>
-        <location filename="../main/MainWindow.cpp" line="2481"/>
+        <location filename="../main/MainWindow.cpp" line="2635"/>
+        <location filename="../main/MainWindow.cpp" line="2649"/>
+        <location filename="../main/MainWindow.cpp" line="2663"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Audio file &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2529"/>
+        <location filename="../main/MainWindow.cpp" line="2711"/>
         <source>1. %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2536"/>
+        <location filename="../main/MainWindow.cpp" line="2718"/>
         <source>%1. %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2549"/>
+        <location filename="../main/MainWindow.cpp" line="2731"/>
         <source>Select audio file to export</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2550"/>
+        <location filename="../main/MainWindow.cpp" line="2732"/>
         <source>Which audio file do you want to export from?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2583"/>
+        <location filename="../main/MainWindow.cpp" line="2765"/>
         <source>Export the selected region only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2584"/>
+        <location filename="../main/MainWindow.cpp" line="2766"/>
         <source>Export the whole audio file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2588"/>
-        <location filename="../main/MainWindow.cpp" line="2606"/>
-        <location filename="../main/MainWindow.cpp" line="2872"/>
+        <location filename="../main/MainWindow.cpp" line="2770"/>
+        <location filename="../main/MainWindow.cpp" line="2788"/>
+        <location filename="../main/MainWindow.cpp" line="3060"/>
+        <location filename="../main/MainWindow.cpp" line="3134"/>
         <source>Select region to export</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2589"/>
+        <location filename="../main/MainWindow.cpp" line="2771"/>
         <source>Which region from the original audio file do you want to export?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2602"/>
+        <location filename="../main/MainWindow.cpp" line="2784"/>
         <source>Export the selected regions into separate files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2607"/>
+        <location filename="../main/MainWindow.cpp" line="2789"/>
         <source>Multiple regions of the original audio file are selected.
 What do you want to export?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2638"/>
+        <location filename="../main/MainWindow.cpp" line="2820"/>
         <source>Fragment file %1 already exists, aborting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2682"/>
+        <location filename="../main/MainWindow.cpp" line="2872"/>
         <source>Export multiple audio files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2684"/>
+        <location filename="../main/MainWindow.cpp" line="2874"/>
         <source>Export audio to &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2688"/>
-        <location filename="../main/MainWindow.cpp" line="2816"/>
+        <location filename="../main/MainWindow.cpp" line="2878"/>
+        <location filename="../main/MainWindow.cpp" line="3006"/>
         <source>Failed to write file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2718"/>
+        <location filename="../main/MainWindow.cpp" line="2908"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Layer file %1 could not be opened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2723"/>
-        <location filename="../main/MainWindow.cpp" line="3036"/>
-        <location filename="../main/MainWindow.cpp" line="3068"/>
-        <location filename="../main/MainWindow.cpp" line="3096"/>
-        <location filename="../main/MainWindow.cpp" line="3228"/>
+        <location filename="../main/MainWindow.cpp" line="2913"/>
+        <location filename="../main/MainWindow.cpp" line="3292"/>
+        <location filename="../main/MainWindow.cpp" line="3324"/>
+        <location filename="../main/MainWindow.cpp" line="3357"/>
+        <location filename="../main/MainWindow.cpp" line="3492"/>
         <source>&lt;b&gt;Audio required&lt;/b&gt;&lt;p&gt;Unable to load layer data from &quot;%1&quot; without an audio file.&lt;br&gt;Please load at least one audio file before importing annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2795"/>
+        <location filename="../main/MainWindow.cpp" line="2985"/>
         <source>Sorry, cannot export this layer type to RDF (supported types are: region, note, text, time instants, time values)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3135"/>
+        <location filename="../main/MainWindow.cpp" line="3396"/>
         <source>Enter template name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3140"/>
+        <location filename="../main/MainWindow.cpp" line="3401"/>
         <source>Please enter a name for the saved template:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3144"/>
+        <location filename="../main/MainWindow.cpp" line="3405"/>
         <source>Set as default template for future audio files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3164"/>
+        <location filename="../main/MainWindow.cpp" line="3425"/>
         <source>Template file exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3165"/>
+        <location filename="../main/MainWindow.cpp" line="3426"/>
         <source>&lt;b&gt;Template file exists&lt;/b&gt;&lt;p&gt;The template &quot;%1&quot; already exists.&lt;br&gt;Overwrite it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4543"/>
+        <location filename="../main/MainWindow.cpp" line="4938"/>
         <source>http://www.sonicvisualiser.org/doc/reference/%1/en/</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4648"/>
+        <location filename="../main/MainWindow.cpp" line="4950"/>
+        <source>What&apos;s New</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4962"/>
+        <source>&lt;h3&gt;What&apos;s New in %1&lt;/h3&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4971"/>
+        <source>&lt;b&gt;Note:&lt;/b&gt; A newer version of Sonic Visualiser is available.&lt;br&gt;(Version %1 is available; you are using version %2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5017"/>
+        <source>%1 : %2 configuration, %3-bit build</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5110"/>
         <source>&lt;br&gt;With Serd and Sord RDF parser and store &amp;copy; David Robillard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4649"/>
-        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4696"/>
+        <location filename="../main/MainWindow.cpp" line="5146"/>
+        <source>About %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5214"/>
         <source>Newer version available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2758"/>
+        <location filename="../main/MainWindow.cpp" line="2948"/>
         <source>Failed to open file %1 for writing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="472"/>
+        <location filename="../main/MainWindow.cpp" line="502"/>
         <source>Abandon the current %1 session and start a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="489"/>
+        <location filename="../main/MainWindow.cpp" line="519"/>
         <source>&amp;Import More Audio...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="491"/>
+        <location filename="../main/MainWindow.cpp" line="521"/>
         <source>Import an extra audio file into a new pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="498"/>
+        <location filename="../main/MainWindow.cpp" line="528"/>
         <source>Replace &amp;Main Audio...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="499"/>
+        <location filename="../main/MainWindow.cpp" line="529"/>
         <source>Replace the main audio file of the session with a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="510"/>
+        <location filename="../main/MainWindow.cpp" line="540"/>
         <source>Open &amp;Recent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="521"/>
+        <location filename="../main/MainWindow.cpp" line="551"/>
         <source>Save the current session into a %1 session file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="531"/>
+        <location filename="../main/MainWindow.cpp" line="561"/>
         <source>Save the current session into a new %1 session file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="601"/>
+        <location filename="../main/MainWindow.cpp" line="637"/>
         <source>Apply Session Template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="610"/>
+        <location filename="../main/MainWindow.cpp" line="646"/>
         <source>Export Session as Template...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="617"/>
+        <location filename="../main/MainWindow.cpp" line="653"/>
         <source>Manage Exported Templates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="632"/>
+        <location filename="../main/MainWindow.cpp" line="668"/>
         <source>Exit %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1735"/>
+        <location filename="../main/MainWindow.cpp" line="1900"/>
         <source>Open the %1 reference manual</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1742"/>
+        <location filename="../main/MainWindow.cpp" line="1907"/>
         <source>Open a window showing the keystrokes you can use in %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1747"/>
+        <location filename="../main/MainWindow.cpp" line="1912"/>
         <source>%1 on the &amp;Web</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1748"/>
+        <location filename="../main/MainWindow.cpp" line="1913"/>
         <source>Open the %1 website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1752"/>
+        <location filename="../main/MainWindow.cpp" line="1922"/>
         <source>&amp;About %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1753"/>
+        <location filename="../main/MainWindow.cpp" line="1923"/>
         <source>Show information about %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2601"/>
+        <location filename="../main/MainWindow.cpp" line="2783"/>
         <source>Export the selected regions into a single file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2603"/>
+        <location filename="../main/MainWindow.cpp" line="2785"/>
         <source>Export the whole file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2783"/>
+        <location filename="../main/MainWindow.cpp" line="2973"/>
         <source>Can&apos;t export non-note layers to MIDI</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2819"/>
+        <location filename="../main/MainWindow.cpp" line="3009"/>
         <source>Export layer to &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2854"/>
+        <location filename="../main/MainWindow.cpp" line="3042"/>
         <source>Export the whole pane (%1x%2 pixels)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2856"/>
+        <location filename="../main/MainWindow.cpp" line="3044"/>
         <source>Export the visible area only (%1x%2 pixels)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2859"/>
+        <location filename="../main/MainWindow.cpp" line="3047"/>
         <source>Export the selection extent (%1x%2 pixels)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2862"/>
+        <location filename="../main/MainWindow.cpp" line="3050"/>
+        <location filename="../main/MainWindow.cpp" line="3126"/>
         <source>Export the selection extent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2873"/>
+        <location filename="../main/MainWindow.cpp" line="3061"/>
         <source>Which region of the current pane do you want to export as an image?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2881"/>
+        <location filename="../main/MainWindow.cpp" line="3069"/>
         <source>Note: the whole pane is too wide to be exported as a single image.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2906"/>
+        <location filename="../main/MainWindow.cpp" line="3094"/>
         <source>Failed to save image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2907"/>
+        <location filename="../main/MainWindow.cpp" line="3095"/>
         <source>Failed to save image file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3032"/>
+        <location filename="../main/MainWindow.cpp" line="3288"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3049"/>
+        <location filename="../main/MainWindow.cpp" line="3305"/>
         <source>Open Location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3050"/>
+        <location filename="../main/MainWindow.cpp" line="3306"/>
         <source>Please enter the URL of the location to open:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3063"/>
-        <location filename="../main/MainWindow.cpp" line="3067"/>
-        <location filename="../main/MainWindow.cpp" line="3091"/>
-        <location filename="../main/MainWindow.cpp" line="3095"/>
+        <location filename="../main/MainWindow.cpp" line="3319"/>
+        <location filename="../main/MainWindow.cpp" line="3323"/>
+        <location filename="../main/MainWindow.cpp" line="3352"/>
+        <location filename="../main/MainWindow.cpp" line="3356"/>
         <source>Failed to open location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3064"/>
+        <location filename="../main/MainWindow.cpp" line="3320"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3092"/>
+        <location filename="../main/MainWindow.cpp" line="3353"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;File or URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3222"/>
-        <location filename="../main/MainWindow.cpp" line="3227"/>
+        <location filename="../main/MainWindow.cpp" line="3486"/>
+        <location filename="../main/MainWindow.cpp" line="3491"/>
         <source>Failed to open dropped URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3223"/>
+        <location filename="../main/MainWindow.cpp" line="3487"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;Dropped URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3338"/>
+        <location filename="../main/MainWindow.cpp" line="3601"/>
         <source>Export image to &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3359"/>
+        <location filename="../main/MainWindow.cpp" line="3622"/>
         <source>Session modified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3360"/>
+        <location filename="../main/MainWindow.cpp" line="3623"/>
         <source>&lt;b&gt;Session modified&lt;/b&gt;&lt;p&gt;The current session has been modified.&lt;br&gt;Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3393"/>
+        <location filename="../main/MainWindow.cpp" line="3656"/>
         <source>Close the current session and create a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3394"/>
+        <location filename="../main/MainWindow.cpp" line="3657"/>
         <source>Add this data to the current session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3398"/>
+        <location filename="../main/MainWindow.cpp" line="3661"/>
         <source>Select target for import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3399"/>
+        <location filename="../main/MainWindow.cpp" line="3662"/>
         <source>&lt;b&gt;Select a target for import&lt;/b&gt;&lt;p&gt;This RDF document refers to one or more audio files.&lt;br&gt;You already have an audio waveform loaded.&lt;br&gt;What would you like to do with the new data?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3421"/>
-        <location filename="../main/MainWindow.cpp" line="3444"/>
+        <location filename="../main/MainWindow.cpp" line="3684"/>
+        <location filename="../main/MainWindow.cpp" line="3707"/>
         <source>Failed to save file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3422"/>
-        <location filename="../main/MainWindow.cpp" line="3445"/>
+        <location filename="../main/MainWindow.cpp" line="3685"/>
+        <location filename="../main/MainWindow.cpp" line="3708"/>
         <source>&lt;b&gt;Save failed&lt;/b&gt;&lt;p&gt;Session file &quot;%1&quot; could not be saved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3454"/>
+        <location filename="../main/MainWindow.cpp" line="3717"/>
         <source>Save session as &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3788"/>
+        <location filename="../main/MainWindow.cpp" line="4077"/>
         <source>Multiplex all of the above</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3837"/>
+        <location filename="../main/MainWindow.cpp" line="4142"/>
         <source>Rename Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3838"/>
+        <location filename="../main/MainWindow.cpp" line="4143"/>
         <source>New name for this layer:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3933"/>
+        <location filename="../main/MainWindow.cpp" line="4238"/>
         <source>Playback speed: Normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4062"/>
+        <location filename="../main/MainWindow.cpp" line="4372"/>
         <source>Selection: %1 to %2 (duration %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4065"/>
+        <location filename="../main/MainWindow.cpp" line="4375"/>
         <source>Visible: %1 to %2 (duration %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4116"/>
+        <location filename="../main/MainWindow.cpp" line="4425"/>
         <source>Sample rate mismatch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4117"/>
+        <location filename="../main/MainWindow.cpp" line="4426"/>
         <source>&lt;b&gt;Wrong sample rate&lt;/b&gt;&lt;p&gt;The sample rate of this audio file (%1 Hz) does not match
 the current playback rate (%2 Hz).&lt;p&gt;The file will play at the wrong speed and pitch.&lt;p&gt;Change the &lt;i&gt;Resample mismatching files on import&lt;/i&gt; option under &lt;i&gt;File&lt;/i&gt; -&gt; &lt;i&gt;Preferences&lt;/i&gt; if you want to alter this behaviour.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4128"/>
-        <location filename="../main/MainWindow.cpp" line="4138"/>
+        <location filename="../main/MainWindow.cpp" line="4437"/>
+        <location filename="../main/MainWindow.cpp" line="4447"/>
         <source>Audio processing overload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4129"/>
+        <location filename="../main/MainWindow.cpp" line="4438"/>
         <source>&lt;b&gt;Overloaded&lt;/b&gt;&lt;p&gt;Audio effects plugin auditioning has been disabled due to a processing overload.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4139"/>
+        <location filename="../main/MainWindow.cpp" line="4448"/>
         <source>&lt;b&gt;Overloaded&lt;/b&gt;&lt;p&gt;Audio playback speed processing has been reduced to a single channel, due to a processing overload.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4146"/>
+        <location filename="../main/MainWindow.cpp" line="4478"/>
         <source>Problems loading plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4224"/>
+        <location filename="../main/MainWindow.cpp" line="4559"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4352"/>
+        <location filename="../main/MainWindow.cpp" line="4700"/>
         <source>Reset Counters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4376"/>
-        <location filename="../main/MainWindow.cpp" line="4383"/>
+        <location filename="../main/MainWindow.cpp" line="4768"/>
+        <location filename="../main/MainWindow.cpp" line="4775"/>
         <source>Failed to generate layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4396"/>
-        <location filename="../main/MainWindow.cpp" line="4431"/>
+        <location filename="../main/MainWindow.cpp" line="4788"/>
+        <location filename="../main/MainWindow.cpp" line="4823"/>
         <source>Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4409"/>
-        <location filename="../main/MainWindow.cpp" line="4416"/>
+        <location filename="../main/MainWindow.cpp" line="4801"/>
+        <location filename="../main/MainWindow.cpp" line="4808"/>
         <source>Failed to regenerate layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4410"/>
+        <location filename="../main/MainWindow.cpp" line="4802"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to regenerate derived layer &quot;%1&quot; using new data model as input.&lt;p&gt;The layer transform &quot;%2&quot; failed:&lt;p&gt;%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4417"/>
+        <location filename="../main/MainWindow.cpp" line="4809"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to regenerate derived layer &quot;%1&quot; using new data model as input.&lt;p&gt;The layer transform &quot;%2&quot; failed.&lt;p&gt;No error information is available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4431"/>
+        <location filename="../main/MainWindow.cpp" line="4823"/>
         <source>&lt;b&gt;Warning when regenerating layer&lt;/b&gt;&lt;p&gt;When regenerating the derived layer &quot;%1&quot; using new data model as input:&lt;p&gt;%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4441"/>
+        <location filename="../main/MainWindow.cpp" line="4831"/>
         <source>Failed to calculate alignment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4442"/>
-        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment using transform &quot;%1&quot;:&lt;p&gt;%2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4522"/>
-        <source>Adjust the master playback level</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4524"/>
+        <location filename="../main/MainWindow.cpp" line="4919"/>
         <source>Adjust the master playback speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4537"/>
+        <location filename="../main/MainWindow.cpp" line="4932"/>
         <source>http://www.sonicvisualiser.org/</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4557"/>
+        <location filename="../main/MainWindow.cpp" line="5007"/>
         <source>Release %1 : Revision %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4559"/>
+        <location filename="../main/MainWindow.cpp" line="5009"/>
         <source>Release %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4563"/>
+        <location filename="../main/MainWindow.cpp" line="5013"/>
         <source>Unreleased : Revision %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4569"/>
+        <location filename="../main/MainWindow.cpp" line="5028"/>
         <source>&lt;h3&gt;About Sonic Visualiser&lt;/h3&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4570"/>
+        <location filename="../main/MainWindow.cpp" line="5029"/>
         <source>&lt;p&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;br&gt;&lt;a href=&quot;http://www.sonicvisualiser.org/&quot;&gt;http://www.sonicvisualiser.org/&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4571"/>
-        <source>&lt;p&gt;&lt;small&gt;%1 : %2 configuration&lt;/small&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4573"/>
+        <location filename="../main/MainWindow.cpp" line="5019"/>
         <source>Debug</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4573"/>
+        <location filename="../main/MainWindow.cpp" line="5019"/>
         <source>Release</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4577"/>
-        <source>With Qt v%1 &amp;copy; Nokia Corporation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4581"/>
+        <location filename="../main/MainWindow.cpp" line="5044"/>
         <source>&lt;br&gt;With JACK audio output library v%1 &amp;copy; Paul Davis and Jack O&apos;Quin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4583"/>
+        <location filename="../main/MainWindow.cpp" line="5046"/>
         <source>&lt;br&gt;With JACK audio output library &amp;copy; Paul Davis and Jack O&apos;Quin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4587"/>
+        <location filename="../main/MainWindow.cpp" line="5050"/>
         <source>&lt;br&gt;With PortAudio audio output library &amp;copy; Ross Bencina and Phil Burk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4591"/>
+        <location filename="../main/MainWindow.cpp" line="5054"/>
         <source>&lt;br&gt;With PulseAudio audio output library v%1 &amp;copy; Lennart Poettering and Pierre Ossman</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4593"/>
+        <location filename="../main/MainWindow.cpp" line="5056"/>
         <source>&lt;br&gt;With PulseAudio audio output library &amp;copy; Lennart Poettering and Pierre Ossman</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4598"/>
+        <location filename="../main/MainWindow.cpp" line="5061"/>
         <source>&lt;br&gt;With Ogg file decoder (oggz v%1, fishsound v%2) &amp;copy; CSIRO Australia</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4600"/>
+        <location filename="../main/MainWindow.cpp" line="5063"/>
         <source>&lt;br&gt;With Ogg file decoder &amp;copy; CSIRO Australia</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4605"/>
+        <location filename="../main/MainWindow.cpp" line="5068"/>
         <source>&lt;br&gt;With MAD mp3 decoder v%1 &amp;copy; Underbit Technologies Inc</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4607"/>
+        <location filename="../main/MainWindow.cpp" line="5070"/>
         <source>&lt;br&gt;With MAD mp3 decoder &amp;copy; Underbit Technologies Inc</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4612"/>
+        <location filename="../main/MainWindow.cpp" line="5075"/>
         <source>&lt;br&gt;With libsamplerate v%1 &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4614"/>
+        <location filename="../main/MainWindow.cpp" line="5077"/>
         <source>&lt;br&gt;With libsamplerate &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4619"/>
+        <location filename="../main/MainWindow.cpp" line="5082"/>
         <source>&lt;br&gt;With libsndfile v%1 &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4621"/>
+        <location filename="../main/MainWindow.cpp" line="5084"/>
         <source>&lt;br&gt;With libsndfile &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4626"/>
+        <location filename="../main/MainWindow.cpp" line="5089"/>
         <source>&lt;br&gt;With FFTW3 v%1 &amp;copy; Matteo Frigo and MIT</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4628"/>
+        <location filename="../main/MainWindow.cpp" line="5091"/>
         <source>&lt;br&gt;With FFTW3 &amp;copy; Matteo Frigo and MIT</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4633"/>
-        <source>&lt;br&gt;With Rubber Band v%1 &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4635"/>
-        <source>&lt;br&gt;With Rubber Band &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4639"/>
-        <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4641"/>
+        <location filename="../main/MainWindow.cpp" line="5103"/>
         <source>&lt;br&gt;With LADSPA plugin support (API v%1) &amp;copy; Richard Furse, Paul Davis, Stefan Westerfeld</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4642"/>
+        <location filename="../main/MainWindow.cpp" line="5104"/>
         <source>&lt;br&gt;With DSSI plugin support (API v%1) &amp;copy; Chris Cannam, Steve Harris, Sean Bolton</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4644"/>
+        <location filename="../main/MainWindow.cpp" line="5106"/>
         <source>&lt;br&gt;With Redland RDF datastore v%1 &amp;copy; Dave Beckett and the University of Bristol</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4646"/>
+        <location filename="../main/MainWindow.cpp" line="5108"/>
         <source>&lt;br&gt;With Redland RDF datastore &amp;copy; Dave Beckett and the University of Bristol</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4651"/>
+        <location filename="../main/MainWindow.cpp" line="5113"/>
         <source>&lt;br&gt;With RtMidi &amp;copy; Gary P. Scavone</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4655"/>
+        <location filename="../main/MainWindow.cpp" line="5117"/>
         <source>&lt;br&gt;With liblo Lite OSC library v%1 &amp;copy; Steve Harris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4657"/>
+        <location filename="../main/MainWindow.cpp" line="5119"/>
         <source>&lt;br&gt;With liblo Lite OSC library &amp;copy; Steve Harris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4661"/>
+        <location filename="../main/MainWindow.cpp" line="5033"/>
         <source>&lt;/small&gt;&lt;p&gt;&lt;small&gt;The OSC URL for this instance is: &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4668"/>
-        <source>With </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4668"/>
-        <source>Using </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4680"/>
-        <source>About Sonic Visualiser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/OSCHandler.cpp" line="319"/>
+        <location filename="../main/OSCHandler.cpp" line="337"/>
         <source>Add %1 Pane</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4480,215 +4678,301 @@
 <context>
     <name>MainWindowBase</name>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="645"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="698"/>
         <source>%1 (modified)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="660"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="713"/>
         <source> (modified)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="858"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="939"/>
         <source>Cut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="929"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1010"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1035"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1058"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1148"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1167"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1186"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1116"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1139"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1229"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1248"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1267"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1089"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1170"/>
         <source>Add Point at %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1132"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1213"/>
         <source>Add Item at %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1227"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1359"/>
         <source>Opening file or URL...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1366"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1519"/>
         <source>Select target for import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1468"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1892"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2022"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2763"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1621"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2095"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2242"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3131"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1475"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2770"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1628"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3138"/>
         <source>%1: %2 [%3]</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1490"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1531"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1645"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1689"/>
         <source>Import &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1587"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1745"/>
         <source>Opening playlist...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2041"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2065"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2261"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2287"/>
         <source>Importing from RDF...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1792"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1995"/>
         <source>Opening session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1360"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1440"/>
+        <source>Not enough disc space</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1441"/>
+        <source>&lt;b&gt;Not enough disc space&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough spare disc space to accommodate any necessary temporary files.&lt;/p&gt;&lt;p&gt;Please clear some space and try again.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1448"/>
+        <source>Not enough memory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1449"/>
+        <source>&lt;b&gt;Not enough memory&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough memory to accommodate any necessary temporary data.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1513"/>
         <source>Close the current session and start a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1361"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1514"/>
         <source>Replace the main audio file in this session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1362"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1515"/>
         <source>Add the audio file to this session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1367"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1520"/>
         <source>&lt;b&gt;Select a target for import&lt;/b&gt;&lt;p&gt;You already have an audio file loaded.&lt;br&gt;What would you like to do with the new audio file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1449"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1602"/>
         <source>Import audio file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1673"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1831"/>
         <source>Import layer XML file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1707"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1865"/>
         <source>Import MIDI file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1877"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1976"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2080"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2194"/>
         <source>SV XML file read error:
 %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1890"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2093"/>
         <source>Import session file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1988"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2110"/>
+        <source>Incomplete session loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2111"/>
+        <source>Some of the audio content referred to by the original session file could not be loaded.
+If you save this session, it will be saved without any reference to that audio, and information may be lost.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2206"/>
         <source>Open session template &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2056"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2069"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2278"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2291"/>
         <source>Failed to import RDF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2057"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2279"/>
         <source>&lt;b&gt;Failed to import RDF&lt;/b&gt;&lt;p&gt;Importing data from RDF document at &quot;%1&quot; failed: %2&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2070"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2292"/>
         <source>&lt;b&gt;Failed to import RDF&lt;/b&gt;&lt;p&gt;No suitable data models found for import from RDF document at &quot;%1&quot;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2074"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2296"/>
         <source>Import RDF document &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2217"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2489"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2491"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open audio device: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2494"/>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2496"/>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2503"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;).&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2505"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;): %2.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2508"/>
+        <source>&lt;p&gt;Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2510"/>
+        <source>&lt;p&gt;Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2515"/>
         <source>Couldn&apos;t open audio device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2218"/>
-        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device for playback.&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3392"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3763"/>
         <source>Recording: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2308"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2321"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2359"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2630"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2643"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2681"/>
         <source>Failed to write file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2309"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2322"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2360"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2631"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2644"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2682"/>
         <source>&lt;b&gt;Save failed&lt;/b&gt;&lt;p&gt;Failed to write to file &quot;%1&quot;: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2783"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3049"/>
+        <source>No record device available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3050"/>
+        <source>&lt;b&gt;No record device available&lt;/b&gt;&lt;p&gt;Failed to find or open an audio device for recording. Only playback will be available.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3078"/>
+        <source>Recording failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3079"/>
+        <source>&lt;b&gt;Recording failed&lt;/b&gt;&lt;p&gt;Failed to switch to record mode (some internal problem?)&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3151"/>
         <source>Import Recorded Audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3075"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3446"/>
         <source>Add Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3121"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3492"/>
         <source>Remove Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3144"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3561"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3515"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3932"/>
         <source>Delete Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3380"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3751"/>
         <source>Playing: %1 of %2 (%3 remaining)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4802,7 +5086,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/ModelTransformerFactory.cpp" line="239"/>
+        <location filename="../svcore/transform/ModelTransformerFactory.cpp" line="238"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4810,17 +5094,32 @@
 <context>
     <name>NetworkPermissionTester</name>
     <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="44"/>
+        <location filename="../main/NetworkPermissionTester.cpp" line="48"/>
         <source>Welcome to Sonic Visualiser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="53"/>
-        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary, University of London, Sonic Visualiser is provided free as open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like to make networking connections and open a network port.&lt;/p&gt;&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control, where configured; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;No personal information will be sent, no tracking is carried out, and all requests happen in the background without interrupting your work.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful. But if you do not wish to do so, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="69"/>
+        <location filename="../main/NetworkPermissionTester.cpp" line="55"/>
+        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary University of London, Sonic Visualiser is open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like permission to use the network.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="66"/>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="74"/>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="83"/>
+        <source>&lt;p&gt;&lt;b&gt;No personal information will be sent, no tracking is carried out, and no individual information will be shared with anyone else.&lt;/b&gt; We will however make aggregate counts of distinct requests for usage reporting.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful to you and supports the public funding of this work. But if you do not wish to allow it, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="92"/>
         <source>Allow this</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4828,75 +5127,75 @@
 <context>
     <name>NoteLayer</name>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="56"/>
         <location filename="../svgui/layer/NoteLayer.cpp" line="57"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="897"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="58"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="898"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="94"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="95"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="95"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="96"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="111"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="160"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="161"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="161"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="162"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="162"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="163"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="163"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="164"/>
         <source>MIDI Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="473"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="474"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="475"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="498"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="476"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="499"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="512"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="513"/>
         <source>%1 (%2, %3 Hz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="519"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="520"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="525"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="526"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="532"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="533"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -4904,7 +5203,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="537"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="538"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -4912,68 +5211,68 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="902"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="903"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="978"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="979"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1030"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1031"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1051"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1099"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1052"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1100"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1053"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1054"/>
         <source>Relocate Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1056"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1057"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1115"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1116"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1140"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1141"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1179"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1180"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1225"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1226"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1226"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1227"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1240"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1241"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1311"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1312"/>
         <source>Record Note</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5029,7 +5328,7 @@
 <context>
     <name>OggVorbisFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/OggVorbisFileReader.cpp" line="77"/>
+        <location filename="../svcore/data/fileio/OggVorbisFileReader.cpp" line="110"/>
         <source>Decoding %1...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5042,7 +5341,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Overview.cpp" line="362"/>
+        <location filename="../svgui/view/Overview.cpp" line="359"/>
         <source>Click and drag to navigate; double-click to jump</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5050,300 +5349,300 @@
 <context>
     <name>Pane</name>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="141"/>
+        <location filename="../svgui/view/Pane.cpp" line="143"/>
         <source>Horizontal Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="167"/>
+        <location filename="../svgui/view/Pane.cpp" line="169"/>
         <source>Vertical Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="188"/>
+        <location filename="../svgui/view/Pane.cpp" line="190"/>
         <source>Reset zoom to default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="675"/>
+        <location filename="../svgui/view/Pane.cpp" line="699"/>
         <source>Some lengthy prefix:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="836"/>
+        <location filename="../svgui/view/Pane.cpp" line="864"/>
         <source>Reference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="838"/>
-        <location filename="../svgui/view/Pane.cpp" line="842"/>
+        <location filename="../svgui/view/Pane.cpp" line="866"/>
+        <location filename="../svgui/view/Pane.cpp" line="870"/>
         <source>Unaligned</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="844"/>
+        <location filename="../svgui/view/Pane.cpp" line="872"/>
         <source>Aligning: %1%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="846"/>
+        <location filename="../svgui/view/Pane.cpp" line="874"/>
         <source>Aligned</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="888"/>
+        <location filename="../svgui/view/Pane.cpp" line="916"/>
         <source>%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="998"/>
-        <location filename="../svgui/view/Pane.cpp" line="1014"/>
+        <location filename="../svgui/view/Pane.cpp" line="1026"/>
+        <location filename="../svgui/view/Pane.cpp" line="1042"/>
         <source>+%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1064"/>
+        <location filename="../svgui/view/Pane.cpp" line="1091"/>
         <source>(R)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1067"/>
+        <location filename="../svgui/view/Pane.cpp" line="1089"/>
         <source>(X)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1071"/>
+        <location filename="../svgui/view/Pane.cpp" line="1095"/>
         <source>%1 / %2Hz%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1255"/>
-        <location filename="../svgui/view/Pane.cpp" line="1261"/>
+        <location filename="../svgui/view/Pane.cpp" line="1281"/>
+        <location filename="../svgui/view/Pane.cpp" line="1287"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1256"/>
+        <location filename="../svgui/view/Pane.cpp" line="1282"/>
         <source>Zoom In</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1256"/>
+        <location filename="../svgui/view/Pane.cpp" line="1282"/>
         <source>Wheel Up</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1257"/>
+        <location filename="../svgui/view/Pane.cpp" line="1283"/>
         <source>Zoom Out</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1257"/>
+        <location filename="../svgui/view/Pane.cpp" line="1283"/>
         <source>Wheel Down</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1259"/>
+        <location filename="../svgui/view/Pane.cpp" line="1285"/>
         <source>General Pane Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1261"/>
+        <location filename="../svgui/view/Pane.cpp" line="1287"/>
         <source>Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1262"/>
+        <location filename="../svgui/view/Pane.cpp" line="1288"/>
         <source>Zoom in or out in time axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1263"/>
+        <location filename="../svgui/view/Pane.cpp" line="1289"/>
         <source>Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1263"/>
+        <location filename="../svgui/view/Pane.cpp" line="1289"/>
         <source>Ctrl+Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1264"/>
+        <location filename="../svgui/view/Pane.cpp" line="1290"/>
         <source>Scroll rapidly left or right in time axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1265"/>
+        <location filename="../svgui/view/Pane.cpp" line="1291"/>
         <source>Zoom Vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1265"/>
+        <location filename="../svgui/view/Pane.cpp" line="1291"/>
         <source>Shift+Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1266"/>
+        <location filename="../svgui/view/Pane.cpp" line="1292"/>
         <source>Zoom in or out in the vertical axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1267"/>
+        <location filename="../svgui/view/Pane.cpp" line="1293"/>
         <source>Scroll Vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1267"/>
+        <location filename="../svgui/view/Pane.cpp" line="1293"/>
         <source>Alt+Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1268"/>
+        <location filename="../svgui/view/Pane.cpp" line="1294"/>
         <source>Scroll up or down in the vertical axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1269"/>
+        <location filename="../svgui/view/Pane.cpp" line="1295"/>
         <source>Navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1269"/>
+        <location filename="../svgui/view/Pane.cpp" line="1295"/>
         <source>Middle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1270"/>
+        <location filename="../svgui/view/Pane.cpp" line="1296"/>
         <source>Click middle button and drag to navigate with any tool</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1271"/>
+        <location filename="../svgui/view/Pane.cpp" line="1297"/>
         <source>Relocate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1271"/>
+        <location filename="../svgui/view/Pane.cpp" line="1297"/>
         <source>Double-Click Middle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1272"/>
+        <location filename="../svgui/view/Pane.cpp" line="1298"/>
         <source>Double-click middle button to relocate with any tool</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1273"/>
+        <location filename="../svgui/view/Pane.cpp" line="1299"/>
         <source>Menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1273"/>
+        <location filename="../svgui/view/Pane.cpp" line="1299"/>
         <source>Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1274"/>
+        <location filename="../svgui/view/Pane.cpp" line="1300"/>
         <source>Show pane context menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2508"/>
+        <location filename="../svgui/view/Pane.cpp" line="2536"/>
         <source>Enter new range</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2509"/>
+        <location filename="../svgui/view/Pane.cpp" line="2537"/>
         <source>New vertical display range, from %1 to %2 %4:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2631"/>
+        <location filename="../svgui/view/Pane.cpp" line="2659"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2638"/>
+        <location filename="../svgui/view/Pane.cpp" line="2666"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2802"/>
+        <location filename="../svgui/view/Pane.cpp" line="2830"/>
         <source>Click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2813"/>
+        <location filename="../svgui/view/Pane.cpp" line="2841"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Cmd for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2815"/>
+        <location filename="../svgui/view/Pane.cpp" line="2843"/>
         <source>Click and drag to select a range; hold Cmd for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2819"/>
+        <location filename="../svgui/view/Pane.cpp" line="2847"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Ctrl for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2821"/>
+        <location filename="../svgui/view/Pane.cpp" line="2849"/>
         <source>Click and drag to select a range; hold Ctrl for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2830"/>
+        <location filename="../svgui/view/Pane.cpp" line="2858"/>
         <source>Click and drag to move the selection boundary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2835"/>
+        <location filename="../svgui/view/Pane.cpp" line="2863"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; middle-click to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2837"/>
+        <location filename="../svgui/view/Pane.cpp" line="2865"/>
         <source>Click and drag to select a range; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2845"/>
+        <location filename="../svgui/view/Pane.cpp" line="2873"/>
         <source>Click to add a new item in the active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2852"/>
+        <location filename="../svgui/view/Pane.cpp" line="2880"/>
         <source>Click to erase an item from the active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2859"/>
+        <location filename="../svgui/view/Pane.cpp" line="2887"/>
         <source>Click and drag an item in the active layer to move it; hold Shift to override initial resistance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2864"/>
+        <location filename="../svgui/view/Pane.cpp" line="2892"/>
         <source>Click and drag to move all items in the selected range</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2880"/>
+        <location filename="../svgui/view/Pane.cpp" line="2908"/>
         <source>Click and drag to adjust the visible range of the vertical scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2882"/>
+        <location filename="../svgui/view/Pane.cpp" line="2910"/>
         <source>Click and drag to adjust the vertical zoom level</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2884"/>
+        <location filename="../svgui/view/Pane.cpp" line="2912"/>
         <source>Click and drag to adjust the horizontal zoom level</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2886"/>
+        <location filename="../svgui/view/Pane.cpp" line="2914"/>
         <source>Reset horizontal and vertical zoom levels to their defaults</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5392,382 +5691,534 @@
 <context>
     <name>PluginParameterDialog</name>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="56"/>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="193"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="57"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="181"/>
         <source>Plugin Parameters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="104"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="101"/>
         <source>Name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="127"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="121"/>
         <source>Version:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="140"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="128"/>
         <source>Maker:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="134"/>
+        <source>Copyright:  </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="146"/>
-        <source>Copyright:  </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="158"/>
         <source>Output:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="177"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="165"/>
         <source>Input Material</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="186"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="174"/>
         <source>Restrict to selection extents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="219"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="207"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="225"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="213"/>
         <source>Processing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="235"/>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="606"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="223"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="592"/>
         <source>Advanced &gt;&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="324"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="312"/>
         <source>Channel mismatch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>This plugin requires at least %1 input channels, but only %2 %3 available.  The plugin probably will not work correctly.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>are</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>is</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="342"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="330"/>
         <source>This plugin accepts no more than %1 input channels,
 but %2 are available.  Only the first %3 will be used.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="349"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="337"/>
         <source>This plugin only has a single channel input,
 but the source has %1 channels.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="352"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="340"/>
         <source>Use mean of source channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="354"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="342"/>
         <source>Use channel %1 only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="406"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="394"/>
         <source>Window size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="408"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="396"/>
         <source>Audio frames per block:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="433"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="421"/>
         <source>Window increment:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="457"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="445"/>
         <source>Window shape:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="601"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="587"/>
         <source>Advanced &lt;&lt;</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginPathConfigurator</name>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="41"/>
+        <source>Move the selected location later in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="47"/>
+        <source>Move the selected location earlier in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="53"/>
+        <source>Add a new location to the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="59"/>
+        <source>Remove the selected location from the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="64"/>
+        <source>Reset to Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="65"/>
+        <source>Reset the list for this plugin type to its default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="72"/>
+        <source>Review plugins...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="79"/>
+        <source>Plugin locations for plugin type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="118"/>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="120"/>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="122"/>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="127"/>
+        <source>Vamp (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="129"/>
+        <source>LADSPA (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="131"/>
+        <source>DSSI (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="188"/>
+        <source>(Variable is currently unset)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="192"/>
+        <source>(Current value begins: &quot;%1 ...&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="195"/>
+        <source>(Currently set to: &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="200"/>
+        <source>Allow the %1 environment variable to take priority over this
+%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="327"/>
+        <source>Choose directory to add</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>PluginReviewDialog</name>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="31"/>
+        <source>Plugins Loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="69"/>
+        <source>Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="69"/>
+        <source>Library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Found in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="78"/>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="95"/>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="112"/>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>Preferences</name>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="118"/>
+        <location filename="../svcore/base/Preferences.cpp" line="121"/>
         <source>Spectrogram y-axis interpolation:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="121"/>
+        <location filename="../svcore/base/Preferences.cpp" line="124"/>
         <source>Spectrogram x-axis interpolation:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="124"/>
+        <location filename="../svcore/base/Preferences.cpp" line="127"/>
         <source>Frequency of concert A</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="127"/>
+        <location filename="../svcore/base/Preferences.cpp" line="130"/>
         <source>Property box layout</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="130"/>
+        <location filename="../svcore/base/Preferences.cpp" line="133"/>
         <source>Spectral analysis window shape</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="133"/>
+        <location filename="../svcore/base/Preferences.cpp" line="136"/>
         <source>Playback resampler type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="136"/>
+        <location filename="../svcore/base/Preferences.cpp" line="139"/>
         <source>Normalise audio signal when reading from audio file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="139"/>
+        <location filename="../svcore/base/Preferences.cpp" line="142"/>
         <source>Omit temporaries from Recent Files menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="142"/>
+        <location filename="../svcore/base/Preferences.cpp" line="145"/>
         <source>Resample mismatching files on import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="145"/>
+        <location filename="../svcore/base/Preferences.cpp" line="148"/>
+        <source>Load mp3 files in gapless mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="151"/>
         <source>Single fixed sample rate to resample all files to</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="148"/>
+        <location filename="../svcore/base/Preferences.cpp" line="154"/>
         <source>Location for cache file directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="151"/>
+        <location filename="../svcore/base/Preferences.cpp" line="157"/>
         <source>Background colour preference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="154"/>
+        <location filename="../svcore/base/Preferences.cpp" line="160"/>
         <source>Time display precision</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="157"/>
+        <location filename="../svcore/base/Preferences.cpp" line="163"/>
         <source>Use hours:minutes:seconds format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="160"/>
+        <location filename="../svcore/base/Preferences.cpp" line="166"/>
         <source>Label middle C as</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="163"/>
+        <location filename="../svcore/base/Preferences.cpp" line="169"/>
         <source>Font size for text overlays</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="166"/>
+        <location filename="../svcore/base/Preferences.cpp" line="172"/>
         <source>Show splash screen on startup</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="323"/>
+        <location filename="../svcore/base/Preferences.cpp" line="329"/>
         <source>Show boxes for all panes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="324"/>
+        <location filename="../svcore/base/Preferences.cpp" line="330"/>
         <source>Show box for current pane only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="328"/>
+        <location filename="../svcore/base/Preferences.cpp" line="334"/>
         <source>Rectangular</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="329"/>
+        <location filename="../svcore/base/Preferences.cpp" line="335"/>
         <source>Triangular</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="330"/>
+        <location filename="../svcore/base/Preferences.cpp" line="336"/>
         <source>Hamming</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="331"/>
+        <location filename="../svcore/base/Preferences.cpp" line="337"/>
         <source>Hann</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="332"/>
+        <location filename="../svcore/base/Preferences.cpp" line="338"/>
         <source>Blackman</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="333"/>
+        <location filename="../svcore/base/Preferences.cpp" line="339"/>
         <source>Gaussian</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="334"/>
+        <location filename="../svcore/base/Preferences.cpp" line="340"/>
         <source>Parzen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="335"/>
+        <location filename="../svcore/base/Preferences.cpp" line="341"/>
         <source>Nuttall</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="336"/>
+        <location filename="../svcore/base/Preferences.cpp" line="342"/>
         <source>Blackman-Harris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="341"/>
+        <location filename="../svcore/base/Preferences.cpp" line="347"/>
         <source>Fastest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="342"/>
+        <location filename="../svcore/base/Preferences.cpp" line="348"/>
         <source>Standard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="343"/>
+        <location filename="../svcore/base/Preferences.cpp" line="349"/>
         <source>Highest quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="348"/>
+        <location filename="../svcore/base/Preferences.cpp" line="354"/>
+        <location filename="../svcore/base/Preferences.cpp" line="362"/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="355"/>
+        <location filename="../svcore/base/Preferences.cpp" line="363"/>
+        <source>Linear interpolation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/base/Preferences.cpp" line="356"/>
-        <source>None</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="349"/>
+        <source>4 x Oversampling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/base/Preferences.cpp" line="357"/>
-        <source>Linear interpolation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="350"/>
-        <source>4 x Oversampling</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="351"/>
         <source>4 x Oversampling with interpolation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="362"/>
+        <location filename="../svcore/base/Preferences.cpp" line="368"/>
         <source>Follow desktop theme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="363"/>
+        <location filename="../svcore/base/Preferences.cpp" line="369"/>
         <source>Dark background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="364"/>
+        <location filename="../svcore/base/Preferences.cpp" line="370"/>
         <source>Light background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="369"/>
+        <location filename="../svcore/base/Preferences.cpp" line="375"/>
         <source>Standard (to millisecond)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="370"/>
+        <location filename="../svcore/base/Preferences.cpp" line="376"/>
         <source>High resolution (to microsecond)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="371"/>
+        <location filename="../svcore/base/Preferences.cpp" line="377"/>
         <source>24 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="372"/>
+        <location filename="../svcore/base/Preferences.cpp" line="378"/>
         <source>25 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="373"/>
+        <location filename="../svcore/base/Preferences.cpp" line="379"/>
         <source>30 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="374"/>
+        <location filename="../svcore/base/Preferences.cpp" line="380"/>
         <source>50 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="375"/>
+        <location filename="../svcore/base/Preferences.cpp" line="381"/>
         <source>60 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="380"/>
+        <location filename="../svcore/base/Preferences.cpp" line="386"/>
         <source>C0 - middle of octave scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="381"/>
+        <location filename="../svcore/base/Preferences.cpp" line="387"/>
         <source>C3 - common MIDI sequencer convention</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="382"/>
+        <location filename="../svcore/base/Preferences.cpp" line="388"/>
         <source>C4 - ASA American standard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="383"/>
+        <location filename="../svcore/base/Preferences.cpp" line="389"/>
         <source>C5 - used in Cakewalk and others</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="393"/>
+        <location filename="../svcore/base/Preferences.cpp" line="399"/>
         <source>Preferences</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5775,155 +6226,212 @@
 <context>
     <name>PreferencesDialog</name>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="54"/>
+        <location filename="../main/PreferencesDialog.cpp" line="64"/>
         <source>Sonic Visualiser: Application Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="68"/>
+        <location filename="../main/PreferencesDialog.cpp" line="78"/>
         <source>Apply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="223"/>
+        <location filename="../main/PreferencesDialog.cpp" line="152"/>
+        <source>Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="239"/>
+        <location filename="../main/PreferencesDialog.cpp" line="665"/>
+        <location filename="../main/PreferencesDialog.cpp" line="680"/>
+        <source>(auto)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="273"/>
         <source>&lt;home directory&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="273"/>
+        <location filename="../main/PreferencesDialog.cpp" line="323"/>
         <source>Follow system locale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="287"/>
+        <location filename="../main/PreferencesDialog.cpp" line="337"/>
         <source>Russian</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="288"/>
+        <location filename="../main/PreferencesDialog.cpp" line="338"/>
         <source>British English</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="289"/>
+        <location filename="../main/PreferencesDialog.cpp" line="339"/>
         <source>American English</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="290"/>
+        <location filename="../main/PreferencesDialog.cpp" line="340"/>
         <source>Czech</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="348"/>
-        <location filename="../main/PreferencesDialog.cpp" line="352"/>
-        <location filename="../main/PreferencesDialog.cpp" line="356"/>
-        <location filename="../main/PreferencesDialog.cpp" line="363"/>
-        <location filename="../main/PreferencesDialog.cpp" line="371"/>
-        <location filename="../main/PreferencesDialog.cpp" line="388"/>
-        <location filename="../main/PreferencesDialog.cpp" line="400"/>
-        <location filename="../main/PreferencesDialog.cpp" line="418"/>
+        <location filename="../main/PreferencesDialog.cpp" line="407"/>
+        <location filename="../main/PreferencesDialog.cpp" line="429"/>
+        <location filename="../main/PreferencesDialog.cpp" line="435"/>
+        <location filename="../main/PreferencesDialog.cpp" line="440"/>
+        <location filename="../main/PreferencesDialog.cpp" line="445"/>
+        <location filename="../main/PreferencesDialog.cpp" line="462"/>
+        <location filename="../main/PreferencesDialog.cpp" line="467"/>
+        <location filename="../main/PreferencesDialog.cpp" line="482"/>
+        <location filename="../main/PreferencesDialog.cpp" line="566"/>
+        <location filename="../main/PreferencesDialog.cpp" line="571"/>
+        <location filename="../main/PreferencesDialog.cpp" line="598"/>
+        <location filename="../main/PreferencesDialog.cpp" line="602"/>
+        <location filename="../main/PreferencesDialog.cpp" line="606"/>
+        <location filename="../main/PreferencesDialog.cpp" line="611"/>
+        <source>%1:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../main/PreferencesDialog.cpp" line="424"/>
-        <location filename="../main/PreferencesDialog.cpp" line="429"/>
-        <location filename="../main/PreferencesDialog.cpp" line="434"/>
-        <location filename="../main/PreferencesDialog.cpp" line="451"/>
-        <location filename="../main/PreferencesDialog.cpp" line="456"/>
-        <location filename="../main/PreferencesDialog.cpp" line="471"/>
-        <source>%1:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="348"/>
+        <source>Overview waveform colour:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="490"/>
+        <source>Run Vamp plugins in separate process:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="506"/>
+        <source>Default session template when loading audio files:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="513"/>
+        <source>(Use &quot;%1&quot; in the File menu to add to these.)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="514"/>
+        <source>Export Session as Template...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="556"/>
+        <source>Audio service:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="560"/>
+        <source>Audio playback device:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="563"/>
+        <source>Audio record device:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="579"/>
+        <source>A&amp;udio I/O</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="589"/>
+        <source>&amp;Plugins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="598"/>
         <source>User interface language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="352"/>
+        <location filename="../main/PreferencesDialog.cpp" line="602"/>
         <source>Allow network usage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="379"/>
-        <source>&amp;General</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="395"/>
+        <location filename="../main/PreferencesDialog.cpp" line="402"/>
         <source>Draw layers at Retina resolution:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="405"/>
+        <location filename="../main/PreferencesDialog.cpp" line="412"/>
         <source>Default spectrogram colour:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="409"/>
+        <location filename="../main/PreferencesDialog.cpp" line="416"/>
         <source>Default melodic spectrogram colour:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="413"/>
+        <location filename="../main/PreferencesDialog.cpp" line="420"/>
         <source>Default colour 3D plot colour:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="442"/>
+        <location filename="../main/PreferencesDialog.cpp" line="453"/>
         <source>&amp;Appearance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="481"/>
+        <location filename="../main/PreferencesDialog.cpp" line="497"/>
         <source>Anal&amp;ysis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="490"/>
-        <source>Default session template for audio files:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="501"/>
+        <location filename="../main/PreferencesDialog.cpp" line="521"/>
         <source>Standard Waveform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="526"/>
+        <location filename="../main/PreferencesDialog.cpp" line="546"/>
         <source>Session &amp;Template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="531"/>
+        <location filename="../main/PreferencesDialog.cpp" line="621"/>
+        <source>&amp;Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="626"/>
         <source>OK</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="532"/>
+        <location filename="../main/PreferencesDialog.cpp" line="627"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="685"/>
+        <location filename="../main/PreferencesDialog.cpp" line="873"/>
         <source>Select a directory to create cache subdirectory in</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="783"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1012"/>
         <source>Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="784"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1013"/>
         <source>&lt;b&gt;Restart required&lt;/b&gt;&lt;p&gt;One or more of the application preferences you have changed may not take full effect until Sonic Visualiser is restarted.&lt;/p&gt;&lt;p&gt;Please exit and restart the application now if you want these changes to take effect immediately.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="805"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1046"/>
         <source>Preferences Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="806"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1047"/>
         <source>Some preferences have been changed but not applied.
 Apply them before closing?</source>
         <translation type="unfinished"></translation>
@@ -5932,7 +6440,7 @@
 <context>
     <name>ProgressDialog</name>
     <message>
-        <location filename="../svgui/widgets/ProgressDialog.cpp" line="28"/>
+        <location filename="../svgui/widgets/ProgressDialog.cpp" line="31"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5940,83 +6448,57 @@
 <context>
     <name>PropertyBox</name>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="160"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="219"/>
         <source>Show</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="177"/>
-        <source>Play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="216"/>
-        <source>Playback Gain</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="218"/>
-        <source>dB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="242"/>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="244"/>
-        <source>Playback Pan / Balance</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="483"/>
-        <source>Add New Colour...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="674"/>
-        <source>Name New Colour</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="675"/>
-        <source>Enter a name for the new colour:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="677"/>
-        <source>Prefer black background for this colour</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="788"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="169"/>
+        <source>Click to toggle playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="746"/>
         <source>Set playback clip:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="856"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="807"/>
+        <source>Adjust playback level and pan of %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="817"/>
+        <source>Change sound used for playback (currently &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="831"/>
         <source> (current value: %1%2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="858"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="833"/>
         <source> (current value: %1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="863"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="838"/>
         <source>Toggle Visibility of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="865"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="840"/>
         <source>Toggle Playback of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="869"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="844"/>
         <source>Toggle %1 property of %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="872"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="847"/>
         <source>Adjust %1 property of %2%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6054,7 +6536,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/PropertyContainer.cpp" line="250"/>
+        <location filename="../svcore/base/PropertyContainer.cpp" line="251"/>
         <source>Set %1 Property</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6075,7 +6557,7 @@
 <context>
     <name>QApplication</name>
     <message>
-        <location filename="../main/main.cpp" line="260"/>
+        <location filename="../main/main.cpp" line="262"/>
         <source>
 Sonic Visualiser is a program for viewing and exploring audio data
 for semantic music analysis and annotation.
@@ -6091,7 +6573,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="270"/>
+        <location filename="../main/main.cpp" line="272"/>
         <source>Sonic Visualiser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6126,13 +6608,13 @@
 <context>
     <name>QFile</name>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="52"/>
+        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="53"/>
         <location filename="../svcore/data/fileio/PlaylistFileReader.cpp" line="69"/>
         <source>File &quot;%1&quot; does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="54"/>
+        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="55"/>
         <location filename="../svcore/data/fileio/PlaylistFileReader.cpp" line="72"/>
         <source>Failed to open file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
@@ -6147,18 +6629,18 @@
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../main/main.cpp" line="522"/>
-        <location filename="../main/main.cpp" line="527"/>
+        <location filename="../main/main.cpp" line="539"/>
+        <location filename="../main/main.cpp" line="544"/>
         <source>Failed to open file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="523"/>
+        <location filename="../main/main.cpp" line="540"/>
         <source>File or URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="528"/>
+        <location filename="../main/main.cpp" line="545"/>
         <source>&lt;b&gt;Audio required&lt;/b&gt;&lt;p&gt;Please load at least one audio file before importing annotation data</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6166,37 +6648,114 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="164"/>
-        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="170"/>
-        <source>Failed to load library</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="172"/>
-        <source>Failed to query plugins from library after loading</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="174"/>
-        <source>Unknown failure</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="176"/>
-        <source>Success: internal error?</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QuickTimeFileReader</name>
-    <message>
-        <location filename="../svcore/data/fileio/QuickTimeFileReader.cpp" line="226"/>
-        <source>Decoding %1...</source>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="92"/>
+        <source>External plugin host executable does not appear to be installed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="244"/>
+        <source>Could not start external plugin host</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="260"/>
+        <source>External plugin host exited unexpectedly while listing plugins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="264"/>
+        <source>External plugin host invocation failed: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="193"/>
+        <source>&lt;b&gt;Failed to scan for plugins&lt;/b&gt;&lt;p&gt;Failed to scan for plugins at startup. Possibly the plugin checker program was not correctly installed alongside %1?&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="200"/>
+        <source>&lt;b&gt;Did not scan for plugins&lt;/b&gt;&lt;p&gt;Apparently no scan for plugins was attempted (internal error?)&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="213"/>
+        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="216"/>
+        <source>&lt;p&gt;These plugins may be incompatible with the system, and will be ignored during this run of %1.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="89"/>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="107"/>
+        <source>&lt;unknown&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="93"/>
+        <source>Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="94"/>
+        <source>White on Black</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="95"/>
+        <source>Black on White</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="96"/>
+        <source>Cherry</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="97"/>
+        <source>Wasp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="98"/>
+        <source>Ice</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="99"/>
+        <source>Sunset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="100"/>
+        <source>Fruit Salad</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="101"/>
+        <source>Banded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="102"/>
+        <source>Highlight</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="103"/>
+        <source>Printer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="104"/>
+        <source>High Gain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2843"/>
+        <source>Exporting audio data...</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -6245,79 +6804,79 @@
 <context>
     <name>RegionLayer</name>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="54"/>
         <location filename="../svgui/layer/RegionLayer.cpp" line="55"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="56"/>
         <source>New Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="100"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="101"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="101"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="102"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="102"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="103"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="120"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="121"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="182"/>
         <source>Bars</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="183"/>
         <source>Segmentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="188"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="189"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="189"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="190"/>
         <source>Equal Spaced</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="190"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="191"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="191"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="192"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="396"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="397"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="398"/>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="424"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="399"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="425"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="433"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="434"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="438"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="439"/>
         <source>Time:	%1
 Value:	%2
 Duration:	%3
@@ -6325,7 +6884,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="443"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="444"/>
         <source>Time:	%1
 Value:	%2
 Duration:	%3
@@ -6333,63 +6892,63 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1139"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1140"/>
         <source>Draw Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1221"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1222"/>
         <source>Erase Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1281"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1282"/>
         <source>Drag Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1302"/>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1349"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1303"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1350"/>
         <source>Edit Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1304"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1305"/>
         <source>Relocate Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1307"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1308"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1366"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1367"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1392"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1393"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1432"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1433"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1479"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1480"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1480"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1481"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1494"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1495"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6440,7 +6999,7 @@
 <context>
     <name>RemoveLayerCommand</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="1240"/>
+        <location filename="../svapp/framework/Document.cpp" line="1190"/>
         <source>Delete %1 Layer</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6454,7 +7013,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/SVFileReader.cpp" line="469"/>
+        <location filename="../svapp/framework/SVFileReader.cpp" line="467"/>
         <source>Opening file or URL...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6475,13 +7034,13 @@
 <context>
     <name>SliceLayer</name>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="146"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="153"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="154"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="161"/>
         <source>%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="158"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="166"/>
         <source>Time:	%1 - %2
 Range:	%3 samples (%4)
 Bin:	%5
@@ -6489,139 +7048,139 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="164"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="172"/>
         <source>First</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="165"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="720"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="760"/>
         <source>Mean</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="165"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="721"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="761"/>
         <source>Peak</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="172"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="180"/>
         <source>Time:	%1 - %2
 Range:	%3 samples (%4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="510"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="529"/>
         <source>0dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="511"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="530"/>
         <source>-Inf</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="542"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="571"/>
         <source>x10</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="567"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="607"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="568"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="605"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="608"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="645"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="569"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="609"/>
         <source>Normalize</source>
         <translation type="unfinished">Normalise</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="570"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="610"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="571"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="611"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="572"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="612"/>
         <source>Sampling Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="710"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="736"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="750"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="776"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="711"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="751"/>
         <source>Meter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="738"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="778"/>
         <source>Rev Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="748"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="751"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="788"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="791"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="719"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="759"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="573"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="613"/>
         <source>Bin Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="607"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="647"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="712"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="737"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="752"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="777"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="713"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="753"/>
         <source>Absolute</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="727"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="767"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="728"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="768"/>
         <source>Steps</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="729"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="769"/>
         <source>Blocks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="730"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="770"/>
         <source>Colours</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6629,22 +7188,22 @@
 <context>
     <name>SparseModel</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="153"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="163"/>
         <source>Sparse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="355"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="370"/>
         <source>Edit Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="371"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="386"/>
         <source>Insert Data Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="384"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="399"/>
         <source>Delete Data Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6652,7 +7211,7 @@
 <context>
     <name>SparseModel::AddPointCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="204"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="214"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6660,7 +7219,7 @@
 <context>
     <name>SparseModel::DeletePointCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="229"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="239"/>
         <source>Delete Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6668,7 +7227,7 @@
 <context>
     <name>SparseModel::RelabelCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="286"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="296"/>
         <source>Re-Label Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6755,23 +7314,23 @@
 <context>
     <name>SpectrogramLayer</name>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="177"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="219"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="252"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="292"/>
         <source>Colour</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="178"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="253"/>
         <source>Colour Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="179"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="254"/>
         <source>Window Size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="180"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="255"/>
         <source>Window Overlap</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6784,337 +7343,341 @@
         <translation type="obsolete">Normalise Visible Area</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="256"/>
         <source>Normalization</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="257"/>
         <source>Bin Display</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="183"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="258"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="184"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="259"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="185"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="260"/>
         <source>Colour Rotation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="186"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="261"/>
         <source>Min Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="187"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="262"/>
         <source>Max Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="188"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="263"/>
         <source>Frequency Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="189"/>
-        <source>Smoothing</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="213"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="287"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="216"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="289"/>
         <source>Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="222"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="295"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="389"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="450"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="456"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="520"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="390"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="457"/>
         <source>Meter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="391"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="458"/>
         <source>dBV^2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="392"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="459"/>
         <source>dBV</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="393"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="460"/>
         <source>Phase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="405"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="414"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="466"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="479"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="406"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="467"/>
+        <source>Col</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="468"/>
+        <source>View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="469"/>
+        <source>Hybrid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="480"/>
         <source>25 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="407"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="481"/>
         <source>50 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="408"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="482"/>
         <source>75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="409"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="483"/>
         <source>87.5 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="410"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="484"/>
         <source>93.75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="420"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="490"/>
         <source>No min</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="421"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="491"/>
         <source>10 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="422"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="492"/>
         <source>20 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="423"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="493"/>
         <source>40 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="424"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="494"/>
         <source>100 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="425"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="495"/>
         <source>250 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="426"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="435"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="496"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="505"/>
         <source>500 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="427"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="436"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="497"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="506"/>
         <source>1 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="428"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="439"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="498"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="509"/>
         <source>4 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="429"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="499"/>
         <source>10 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="437"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="507"/>
         <source>1.5 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="438"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="508"/>
         <source>2 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="440"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="510"/>
         <source>6 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="441"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="511"/>
         <source>8 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="442"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="512"/>
         <source>12 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="443"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="513"/>
         <source>16 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="444"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="514"/>
         <source>No max</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="451"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="521"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="457"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="527"/>
         <source>All Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="458"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="528"/>
         <source>Peak Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="459"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="529"/>
         <source>Frequencies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="462"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="532"/>
         <source>&lt;unknown&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="485"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="488"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="555"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="558"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1492"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1383"/>
         <source>FFT cache failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1493"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1384"/>
         <source>Failed to create the FFT model for this spectrogram.
 There may be insufficient memory or disc space to continue.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2968"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1952"/>
         <source>Peak Frequency:	%1 - %2 Hz
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2971"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1955"/>
         <source>Peak Frequency:	%1 Hz
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2979"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1963"/>
         <source>Peak Pitch:	%3 - %4
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2981"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1965"/>
         <source>Peak Pitch:	%2
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2992"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1976"/>
         <source>Time:	%1 - %2
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2996"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1980"/>
         <source>Time:	%1
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3001"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1985"/>
         <source>%1Bin Frequency:	%2 - %3 Hz
 %4Bin Pitch:	%5 - %6
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3009"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1993"/>
         <source>%1Bin Frequency:	%2 Hz
 %3Bin Pitch:	%4
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3022"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3027"/>
-        <source>-Inf</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3032"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2016"/>
         <source>dB:	%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3034"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2018"/>
         <source>dB:	%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3037"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2021"/>
         <source>
 Phase:	%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3039"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2023"/>
         <source>
 Phase:	%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3069"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2053"/>
         <source>43Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3216"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2126"/>
         <source>%1Hz</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7122,90 +7685,84 @@
 <context>
     <name>SpectrumLayer</name>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="140"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="145"/>
         <source>Window Size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="141"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="146"/>
         <source>Window Overlap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="142"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="147"/>
         <source>Show Peak Frequencies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="166"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="171"/>
         <source>Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="167"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="172"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="222"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="227"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="223"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="228"/>
         <source>25 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="224"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="229"/>
         <source>50 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="225"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="230"/>
         <source>75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="226"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="231"/>
         <source>87.5 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="227"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="232"/>
         <source>93.75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="585"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="597"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="618"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="527"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="539"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="560"/>
         <source>%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="590"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="532"/>
         <source>%1 - %2 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="592"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="534"/>
         <source>%1 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="608"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="613"/>
-        <source>-Inf</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="620"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="562"/>
         <source>%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="626"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="568"/>
         <source>%1
 Bin:	%2 (%3)
 %4 value:	%5
@@ -7213,28 +7770,33 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="630"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="572"/>
         <source>First</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="631"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="573"/>
         <source>Mean</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="631"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="573"/>
         <source>Peak</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="635"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="577"/>
         <source>%1
 Bin:	%2 (%3)
 Value:	%4
 dB:	%5</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="721"/>
+        <source>Hz</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SubdividingMenu</name>
@@ -7437,105 +7999,105 @@
 <context>
     <name>TimeInstantLayer</name>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="44"/>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="481"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="46"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="485"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="84"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="86"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="124"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="126"/>
         <source>Instants</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="125"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="127"/>
         <source>Segmentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="226"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="228"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="228"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="230"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="239"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="241"/>
         <source>Time:	%1
 No label</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="242"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="244"/>
         <source>Time:	%1
 Label:	%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="485"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="489"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="515"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="519"/>
         <source>Add Point at %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="560"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="564"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="606"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="610"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="622"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="626"/>
         <source>Move Point to %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="658"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="662"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="675"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="679"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="701"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="705"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="736"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="740"/>
         <source>Delete Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="779"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="783"/>
         <source>Re-align pasted instants?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="780"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="784"/>
         <source>The instants you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="794"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="798"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7543,227 +8105,227 @@
 <context>
     <name>TimeValueLayer</name>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="58"/>
         <location filename="../svgui/layer/TimeValueLayer.cpp" line="59"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1351"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="60"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1345"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="112"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="148"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="113"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="149"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="113"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="114"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="114"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="115"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="115"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="116"/>
         <source>Draw Segment Division Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="116"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="117"/>
         <source>Show Derivative</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="144"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="145"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="229"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="230"/>
         <source>Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="230"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="231"/>
         <source>Stems</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="231"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="232"/>
         <source>Connected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="232"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="233"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="233"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="234"/>
         <source>Curve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="234"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="235"/>
         <source>Segmentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="235"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="236"/>
         <source>Discrete Curves</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="240"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="241"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="241"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="242"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="242"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="243"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="243"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="244"/>
         <source>+/-1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="600"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="601"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="602"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="603"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="615"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="616"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="620"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="621"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="622"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="623"/>
         <source>%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="628"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="629"/>
         <source>Time:	%1
 Value:	%2
 No label</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="632"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="633"/>
         <source>Time:	%1
 Value:	%2
 Label:	%4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1358"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1352"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1476"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1470"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1525"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1519"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1548"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1593"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1542"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1587"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1550"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1544"/>
         <source>Relocate Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1553"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1547"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1610"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1604"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1636"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1630"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1671"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1665"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1718"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1712"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1719"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1713"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1733"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1727"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1788"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1782"/>
         <source>The items you are pasting do not have values.
 What values do you want to use for these items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1790"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1784"/>
         <source>Some of the items you are pasting do not have values.
 What values do you want to use for these items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1800"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1794"/>
         <source>Zero for all items</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1809"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1803"/>
         <source>Choose value calculation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1833"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1827"/>
         <source>Select cycle size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1834"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1828"/>
         <source>Cycle size:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7799,136 +8361,141 @@
 <context>
     <name>TransformFactory</name>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="386"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="387"/>
         <source> [\(&lt;].*$</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="457"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="551"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="445"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="536"/>
         <source>&lt;unknown maker&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="463"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="727"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="451"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="712"/>
         <source>Extract features using &quot;%1&quot; plugin (from %2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="466"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="730"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="454"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="715"/>
         <source>Extract features using &quot;%1&quot; output of &quot;%2&quot; plugin (from %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="471"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="735"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="459"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="720"/>
         <source>%1 using &quot;%2&quot; plugin (from %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="474"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="738"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="462"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="723"/>
         <source>%1 using &quot;%2&quot; output of &quot;%3&quot; plugin (from %4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="320"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="321"/>
         <source>Analysis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="324"/>
+        <source>Generator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="325"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="327"/>
+        <source>Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="552"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="705"/>
+        <source>%1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="562"/>
+        <source>%1: Output %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="574"/>
+        <source>Extract &quot;%1&quot; data output from &quot;%2&quot; effect plugin (from %3)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="579"/>
+        <source>Extract data output %1 from &quot;%2&quot; effect plugin (from %3)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="323"/>
-        <source>Generator</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="324"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="326"/>
-        <source>Other</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="567"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="720"/>
-        <source>%1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="577"/>
-        <source>%1: Output %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="589"/>
-        <source>Extract &quot;%1&quot; data output from &quot;%2&quot; effect plugin (from %3)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="594"/>
-        <source>Extract data output %1 from &quot;%2&quot; effect plugin (from %3)</source>
+        <source>Effects Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="322"/>
-        <source>Effects Data</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="321"/>
         <source>Effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="621"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="412"/>
+        <source>Failed to list Vamp plugins: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="606"/>
         <source>Transform audio signal with &quot;%1&quot; effect plugin (from %2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="627"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="612"/>
         <source>Generate audio signal using &quot;%1&quot; plugin (from %2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1153"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1191"/>
+        <source>Plugin type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1155"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1193"/>
+        <source>Category</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1156"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1194"/>
+        <source>System Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1157"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1195"/>
-        <source>Plugin type</source>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1158"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1196"/>
+        <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1159"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1197"/>
-        <source>Category</source>
+        <source>Maker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1160"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1198"/>
-        <source>System Identifier</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1161"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1199"/>
-        <source>Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1162"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1200"/>
-        <source>Description</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1163"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1201"/>
-        <source>Maker</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1164"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1202"/>
         <source>Units</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8134,166 +8701,171 @@
 <context>
     <name>View</name>
     <message>
-        <location filename="../svgui/view/View.cpp" line="96"/>
+        <location filename="../svgui/view/View.cpp" line="100"/>
         <source>Global Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="97"/>
+        <location filename="../svgui/view/View.cpp" line="101"/>
         <source>Global Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="98"/>
+        <location filename="../svgui/view/View.cpp" line="102"/>
         <source>Follow Playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="141"/>
+        <location filename="../svgui/view/View.cpp" line="145"/>
         <source>Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="142"/>
+        <location filename="../svgui/view/View.cpp" line="146"/>
         <source>Page</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="143"/>
+        <location filename="../svgui/view/View.cpp" line="147"/>
         <source>Off</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="146"/>
+        <location filename="../svgui/view/View.cpp" line="150"/>
         <source>&lt;unknown&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="1581"/>
+        <location filename="../svgui/view/View.cpp" line="1535"/>
         <source>Layer rendering error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="1603"/>
+        <location filename="../svgui/view/View.cpp" line="1557"/>
         <source>Alignment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2427"/>
+        <location filename="../svgui/view/View.cpp" line="2391"/>
         <source>Waiting for layers to be ready...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2428"/>
-        <location filename="../svgui/view/View.cpp" line="2457"/>
+        <location filename="../svgui/view/View.cpp" line="2392"/>
+        <location filename="../svgui/view/View.cpp" line="2421"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2456"/>
+        <location filename="../svgui/view/View.cpp" line="2420"/>
         <source>Rendering image...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svgui/view/View.cpp" line="2537"/>
+        <source>Exported image from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ViewManager</name>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="371"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="388"/>
         <source>Clear Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="372"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="389"/>
         <source>Select Multiple Regions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="373"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="390"/>
         <source>Select Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="390"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="407"/>
         <source>Enter Navigate mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="391"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="408"/>
         <source>Enter Select mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="392"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="409"/>
         <source>Enter Edit mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="393"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="410"/>
         <source>Enter Draw mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="394"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="411"/>
         <source>Enter Erase mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="395"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="412"/>
         <source>Enter Measure mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="396"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="413"/>
         <source>Enter NoteEdit mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="432"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="449"/>
         <source>Switch on Loop mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="433"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="450"/>
         <source>Switch off Loop mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="447"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="464"/>
         <source>Switch on Play Selection mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="448"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="465"/>
         <source>Switch off Play Selection mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="462"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="479"/>
         <source>Switch on Play Solo mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="463"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="480"/>
         <source>Switch off Play Solo mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="477"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="494"/>
         <source>Switch on Alignment mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="478"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="495"/>
         <source>Switch off Alignment mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="581"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="643"/>
         <source>Scroll to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../svgui/view/ViewManager.cpp" line="642"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="712"/>
         <source>Zoom to %n sample(s) per pixel</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8301,7 +8873,7 @@
         </translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="652"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="722"/>
         <source>Change overlay level</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8309,118 +8881,111 @@
 <context>
     <name>WaveformLayer</name>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="106"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="135"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="109"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="138"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="107"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="110"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="108"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="111"/>
         <source>Normalize Visible Area</source>
         <translation type="unfinished">Normalise Visible Area</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="109"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="112"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="196"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="199"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="197"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="200"/>
         <source>Meter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="198"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="216"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="201"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="219"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="204"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="207"/>
         <source>Separate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="205"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="208"/>
         <source>Mean</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="206"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="209"/>
         <source>Butterfly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="981"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="984"/>
         <source>Time:	%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="985"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="988"/>
         <source>Time:	%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1006"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1009"/>
         <source>Level:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1008"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1011"/>
         <source>Left:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1009"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1012"/>
         <source>Right:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1010"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1013"/>
         <source>Channel %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1033"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1036"/>
         <source>
 %1	%2 - %3 (%4 dB peak)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1036"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1039"/>
         <source>
 %1	%2 (%3 dB peak)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1203"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1256"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1266"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1206"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1259"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1269"/>
         <source>0dB</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1204"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1258"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1268"/>
-        <source>-Inf</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>WindowShapePreview</name>
     <message>
-        <location filename="../svgui/widgets/WindowShapePreview.cpp" line="118"/>
+        <location filename="../svgui/widgets/WindowShapePreview.cpp" line="120"/>
         <source>V / time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8433,7 +8998,7 @@
 <context>
     <name>WritableWaveFileModel</name>
     <message>
-        <location filename="../svcore/data/model/WritableWaveFileModel.h" line="124"/>
+        <location filename="../svcore/data/model/WritableWaveFileModel.h" line="147"/>
         <source>Writable Wave File</source>
         <translation type="unfinished"></translation>
     </message>
Binary file i18n/sonic-visualiser_en_US.qm has changed
--- a/i18n/sonic-visualiser_en_US.ts	Mon Sep 17 13:53:25 2018 +0100
+++ b/i18n/sonic-visualiser_en_US.ts	Mon Sep 17 14:05:41 2018 +0100
@@ -4,17 +4,17 @@
 <context>
     <name>ActivityLog</name>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="37"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="39"/>
         <source>Activity Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="42"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="44"/>
         <source>&lt;p&gt;Activity Log lists your interactions and other events within %1.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="77"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="79"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -22,7 +22,7 @@
 <context>
     <name>AddLayerCommand</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="1179"/>
+        <location filename="../svapp/framework/Document.cpp" line="1129"/>
         <source>Add %1 Layer</source>
         <translation type="unfinished"></translation>
     </message>
@@ -44,59 +44,85 @@
     </message>
 </context>
 <context>
+    <name>AlignmentView</name>
+    <message>
+        <location filename="../svgui/view/AlignmentView.cpp" line="31"/>
+        <source>AlignmentView</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioCallbackPlaySource</name>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="499"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="525"/>
         <source>Play from %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="522"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="548"/>
         <source>Stop at %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="1105"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="1089"/>
         <source>Change time-stretch factor to %1</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioCallbackRecordTarget</name>
+    <message>
+        <location filename="../svapp/audio/AudioCallbackRecordTarget.cpp" line="271"/>
+        <source>recorded-%1.wav</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/audio/AudioCallbackRecordTarget.cpp" line="272"/>
+        <source>Recorded %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioDial</name>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="416"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="419"/>
+        <source>%1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="429"/>
         <source>%1: %2%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="418"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="431"/>
         <source>%2%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="481"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="495"/>
         <source>New value for %1, from %2 to %3 %4:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="484"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="498"/>
         <source>New value for %1, from %2 to %3:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="489"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="503"/>
         <source>Enter a new value from %1 to %2 %3:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="492"/>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="516"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="506"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="530"/>
         <source>Enter a new value from %1 to %2:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="499"/>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="515"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="513"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="529"/>
         <source>Enter new value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -104,72 +130,82 @@
 <context>
     <name>BZipFileDevice</name>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="51"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="59"/>
         <source>File is already open</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="56"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="64"/>
         <source>Append mode not supported</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="62"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="70"/>
         <source>File access mode not specified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="68"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="76"/>
         <source>Read and write modes both specified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="77"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="105"/>
         <source>Failed to open file for writing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="88"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="112"/>
+        <source>Failed to open file handle for writing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="125"/>
         <source>Failed to open bzip2 stream for writing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="104"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="140"/>
         <source>Failed to open file for reading</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="115"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="147"/>
+        <source>Failed to open file handle for reading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="159"/>
         <source>Failed to open bzip2 stream for reading</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="129"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="173"/>
         <source>Internal error (open for neither read nor write)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="138"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="182"/>
         <source>File not open</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="150"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="194"/>
         <source>bzip2 stream write close error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="162"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="207"/>
         <source>bzip2 stream read close error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="171"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="217"/>
         <source>Internal error (close for neither read nor write)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="188"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="234"/>
         <source>bzip2 stream read error</source>
         <translation type="unfinished"></translation>
     </message>
@@ -188,8 +224,7 @@
 <context>
     <name>CSVFileWriter</name>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="67"/>
-        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="92"/>
+        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="81"/>
         <source>Failed to open file %1 for writing</source>
         <translation type="unfinished"></translation>
     </message>
@@ -296,91 +331,106 @@
 <context>
     <name>Colour3DPlotLayer</name>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="177"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="223"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="269"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="310"/>
         <source>Colour</source>
         <translation type="unfinished">Color</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="178"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="218"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="270"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="305"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="179"/>
-        <source>Normalize Columns</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="180"/>
-        <source>Normalize Visible Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="271"/>
+        <source>Normalization</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="272"/>
         <source>Invert Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="273"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="183"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="274"/>
         <source>Always Opaque</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="184"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="275"/>
         <source>Smooth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="185"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="276"/>
         <source>Bin Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="220"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="307"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="316"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="325"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="402"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="421"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="317"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="326"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="403"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="422"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="318"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="404"/>
         <source>+/-1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="319"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="405"/>
         <source>Absolute</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="329"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="411"/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="412"/>
+        <source>Col</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="413"/>
+        <source>View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="414"/>
+        <source>Hybrid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="425"/>
         <source>&lt;unknown&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="336"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="448"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="750"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="837"/>
         <source>Time:	%1 - %2
 Bin:	%3
 Value:	%4</source>
@@ -388,72 +438,26 @@
     </message>
 </context>
 <context>
-    <name>ColourMapper</name>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="88"/>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="106"/>
-        <source>&lt;unknown&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="93"/>
-        <source>White on Black</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="94"/>
-        <source>Black on White</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="92"/>
-        <source>Green</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="95"/>
-        <source>Cherry</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="96"/>
-        <source>Wasp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="97"/>
-        <source>Ice</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="98"/>
-        <source>Sunset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="99"/>
-        <source>Fruit Salad</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="100"/>
-        <source>Banded</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="101"/>
-        <source>Highlight</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="102"/>
-        <source>Printer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="103"/>
-        <source>High Gain</source>
-        <translation type="unfinished"></translation>
+    <name>ColourComboBox</name>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="59"/>
+        <source>Name New Colour</source>
+        <translation type="unfinished">Name New Color</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="60"/>
+        <source>Enter a name for the new colour:</source>
+        <translation type="unfinished">Enter a name for the new color:</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="62"/>
+        <source>Prefer black background for this colour</source>
+        <translation type="unfinished">Prefer black background for this color</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="94"/>
+        <source>Add New Colour...</source>
+        <translation type="unfinished">Add New Color...</translation>
     </message>
 </context>
 <context>
@@ -535,7 +539,7 @@
 <context>
     <name>DecodingWavFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/DecodingWavFileReader.cpp" line="66"/>
+        <location filename="../svcore/data/fileio/DecodingWavFileReader.cpp" line="68"/>
         <source>Decoding %1...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -543,7 +547,7 @@
 <context>
     <name>Dense3DModelPeakCache</name>
     <message>
-        <location filename="../svcore/data/model/Dense3DModelPeakCache.h" line="79"/>
+        <location filename="../svcore/data/model/Dense3DModelPeakCache.h" line="94"/>
         <source>Dense 3-D Peak Cache</source>
         <translation type="unfinished"></translation>
     </message>
@@ -551,17 +555,17 @@
 <context>
     <name>DenseThreeDimensionalModel</name>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="120"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="121"/>
         <source>Dense 3-D</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="137"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="138"/>
         <source>Time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="138"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="139"/>
         <source>Frame</source>
         <translation type="unfinished"></translation>
     </message>
@@ -569,7 +573,7 @@
 <context>
     <name>DenseTimeValueModel</name>
     <message>
-        <location filename="../svcore/data/model/DenseTimeValueModel.h" line="82"/>
+        <location filename="../svcore/data/model/DenseTimeValueModel.h" line="89"/>
         <source>Dense Time-Value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -577,12 +581,12 @@
 <context>
     <name>Document</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="415"/>
+        <location filename="../svapp/framework/Document.cpp" line="421"/>
         <source>Set main model to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="417"/>
+        <location filename="../svapp/framework/Document.cpp" line="423"/>
         <source>Clear main model</source>
         <translation type="unfinished"></translation>
     </message>
@@ -590,7 +594,7 @@
 <context>
     <name>EditableDenseThreeDimensionalModel</name>
     <message>
-        <location filename="../svcore/data/model/EditableDenseThreeDimensionalModel.h" line="182"/>
+        <location filename="../svcore/data/model/EditableDenseThreeDimensionalModel.h" line="189"/>
         <source>Editable Dense 3-D</source>
         <translation type="unfinished"></translation>
     </message>
@@ -598,12 +602,12 @@
 <context>
     <name>FFTModel</name>
     <message>
-        <location filename="../svcore/data/model/FFTModel.h" line="138"/>
+        <location filename="../svcore/data/model/FFTModel.h" line="140"/>
         <source>FFT</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/FFTModel.cpp" line="92"/>
+        <location filename="../svcore/data/model/FFTModel.cpp" line="100"/>
         <source>%1 Hz</source>
         <translation type="unfinished"></translation>
     </message>
@@ -634,53 +638,53 @@
 <context>
     <name>FeatureExtractionModelTransformer</name>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="84"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="87"/>
         <source>Transforms supplied to a single FeatureExtractionModelTransformer instance must be similar in every respect except plugin output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="97"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="101"/>
         <source>No factory available for feature extraction plugin id &quot;%1&quot; (unknown plugin type, or internal error?)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="103"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="108"/>
         <source>Input model for feature extraction plugin &quot;%1&quot; is of wrong type (internal error?)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="109"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="118"/>
         <source>Failed to instantiate plugin &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="124"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="134"/>
         <source>Cannot provide enough channels to feature extraction plugin &quot;%1&quot; (plugin min is %2, max %3; input model has %4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="156"/>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="171"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="164"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="191"/>
         <source>Failed to initialise feature extraction plugin &quot;%1&quot;</source>
         <translation type="unfinished">Failed to initialize feature extraction plugin &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="161"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="176"/>
         <source>Feature extraction plugin &quot;%1&quot; rejected the given step and block sizes (%2 and %3); using plugin defaults (%4 and %5) instead</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="179"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="202"/>
         <source>Transform was configured for version %1 of plugin &quot;%2&quot;, but the plugin being used is version %3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="194"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="218"/>
         <source>Plugin &quot;%1&quot; has no outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="212"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="237"/>
         <source>Plugin &quot;%1&quot; has no output named &quot;%2&quot;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -688,29 +692,29 @@
 <context>
     <name>FileSource</name>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="124"/>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="206"/>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="239"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="122"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="204"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="237"/>
         <source>Unsupported scheme in URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="452"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="450"/>
         <source>Downloading %1...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="746"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="744"/>
         <source>Download cancelled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="774"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="772"/>
         <source>Failed to create local file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="777"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="775"/>
         <source>File contains no data!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -718,75 +722,75 @@
 <context>
     <name>FlexiNoteLayer</name>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="69"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="70"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="971"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="72"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="73"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="974"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="107"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="110"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="108"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="111"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="124"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="127"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="176"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="174"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="177"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="175"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="178"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="176"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="179"/>
         <source>MIDI Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="518"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="521"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="520"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="544"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="523"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="547"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="558"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="561"/>
         <source>%1 (%2, %3 Hz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="565"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="568"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="571"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="574"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="578"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="581"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -794,7 +798,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="583"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="586"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -802,85 +806,85 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="976"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="979"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1052"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1055"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1133"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1136"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1215"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1288"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1608"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1218"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1291"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1611"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1217"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1220"/>
         <source>Relocate Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1220"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1223"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1352"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1355"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1392"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1395"/>
         <source>Snap Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1441"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1444"/>
         <source>Merge Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1624"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1627"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1649"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1652"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1688"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1710"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1691"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1713"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1759"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1762"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1760"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1763"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1774"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1777"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1845"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1848"/>
         <source>Record FlexiNote</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1096,19 +1100,19 @@
     <name>InteractiveFileFinder</name>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="66"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="233"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="241"/>
         <source>Select file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="67"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="234"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="242"/>
         <source>All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="73"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="240"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="248"/>
         <source>Select a session file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1148,54 +1152,54 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="188"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="196"/>
         <source>File does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="189"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="197"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="194"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="202"/>
         <source>File is not readable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="195"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="203"/>
         <source>&lt;b&gt;File is not readable&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; can not be read</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="200"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="389"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="208"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="408"/>
         <source>Directory selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="201"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="390"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="209"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="409"/>
         <source>&lt;b&gt;Directory selected&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; is a directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="206"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="214"/>
         <source>Non-file selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="207"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="215"/>
         <source>&lt;b&gt;Not a file&lt;/b&gt;&lt;p&gt;Path &quot;%1&quot; is not a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="212"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="220"/>
         <source>File is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="213"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="221"/>
         <source>&lt;b&gt;File is empty&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; is empty</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1240,6 +1244,13 @@
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="140"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="297"/>
+        <source>Scalable Vector Graphics files (*.svg)
+All files (*.*)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="145"/>
         <source>Comma-separated data files (*.csv)
 Space-separated .lab files (*.lab)
 Text files (*.txt)
@@ -1247,7 +1258,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="145"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="150"/>
         <source>All supported files (*.sv %1 %2 %3)
 %4 session files (*.%5)
 Audio files (%1)
@@ -1257,30 +1268,31 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="241"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="249"/>
         <source>%1 session files (*.%2)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="248"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="254"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="260"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="266"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="272"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="282"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="288"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="256"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="262"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="268"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="274"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="280"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="290"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="296"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="302"/>
         <source>Select a file to export to</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="249"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="257"/>
         <source>WAV audio files (*.wav)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="255"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="263"/>
         <source>Sonic Visualiser Layer XML files (*.svl)
 Comma-separated data files (*.csv)
 RDF/Turtle files (%1)
@@ -1290,7 +1302,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="261"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="269"/>
         <source>Sonic Visualiser Layer XML files (*.svl)
 Comma-separated data files (*.csv)
 RDF/Turtle files (%1)
@@ -1299,7 +1311,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="267"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="275"/>
         <source>Comma-separated data files (*.csv)
 Sonic Visualiser Layer XML files (*.svl)
 RDF/Turtle files (%1)
@@ -1309,7 +1321,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="273"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="281"/>
         <source>Comma-separated data files (*.csv)
 Sonic Visualiser Layer XML files (*.svl)
 RDF/Turtle files (%1)
@@ -1318,78 +1330,78 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="283"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="291"/>
         <source>Portable Network Graphics files (*.png)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="289"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="303"/>
         <source>Comma-separated data files (*.csv)
 Text files (*.txt)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="395"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="414"/>
         <source>File exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="396"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="415"/>
         <source>&lt;b&gt;File exists&lt;/b&gt;&lt;p&gt;The file &quot;%1&quot; already exists.
 Do you want to overwrite it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="544"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="567"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;Audio file &quot;%1&quot; could not be opened.
 Do you want to locate it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="546"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="569"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; could not be opened.
 Do you want to locate it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="556"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="579"/>
         <source>Failed to open file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="558"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="581"/>
         <source>Locate file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="559"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="582"/>
         <source>Use URL...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="560"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="583"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="579"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="602"/>
         <source>Use URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="580"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="603"/>
         <source>Please enter the URL to use for this file:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="588"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="611"/>
         <source>Failed to open location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="589"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="612"/>
         <source>&lt;b&gt;Failed to open location&lt;/b&gt;&lt;p&gt;URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1566,6 +1578,7 @@
     </message>
     <message>
         <location filename="../svcore/data/model/Labeller.h" line="159"/>
+        <location filename="../svcore/data/model/Labeller.h" line="259"/>
         <source>%1.%2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1575,10 +1588,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/Labeller.h" line="182"/>
+        <location filename="../svcore/data/model/Labeller.h" line="185"/>
         <source>Label Points</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svcore/data/model/Labeller.h" line="232"/>
+        <source>Subdivide Points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/model/Labeller.h" line="276"/>
+        <source>Winnow Points</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Layer</name>
@@ -1707,6 +1730,22 @@
     </message>
 </context>
 <context>
+    <name>LevelPanToolButton</name>
+    <message>
+        <location filename="../svgui/widgets/LevelPanToolButton.cpp" line="55"/>
+        <source>Click to adjust level and pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>LevelPanWidget</name>
+    <message>
+        <location filename="../svgui/widgets/LevelPanWidget.cpp" line="79"/>
+        <source>Drag vertically to adjust level, horizontally to adjust pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MIDIFileImportDialog</name>
     <message>
         <location filename="../svgui/widgets/MIDIFileImportDialog.cpp" line="32"/>
@@ -1827,7 +1866,7 @@
 <context>
     <name>MIDIInput</name>
     <message>
-        <location filename="../svcore/data/midi/MIDIInput.cpp" line="30"/>
+        <location filename="../svcore/data/midi/MIDIInput.cpp" line="63"/>
         <source>Input</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1835,7 +1874,7 @@
 <context>
     <name>MP3FileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/MP3FileReader.cpp" line="116"/>
+        <location filename="../svcore/data/fileio/MP3FileReader.cpp" line="133"/>
         <source>Decoding %1...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1843,692 +1882,690 @@
 <context>
     <name>MainWindow</name>
     <message>
-        <location filename="../main/MainWindow.cpp" line="183"/>
+        <location filename="../main/MainWindow.cpp" line="190"/>
         <source>Black</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="184"/>
+        <location filename="../main/MainWindow.cpp" line="191"/>
         <source>Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="185"/>
+        <location filename="../main/MainWindow.cpp" line="192"/>
         <source>Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="186"/>
-        <location filename="../main/MainWindow.cpp" line="232"/>
-        <location filename="../main/MainWindow.cpp" line="3469"/>
+        <location filename="../main/MainWindow.cpp" line="193"/>
+        <location filename="../main/MainWindow.cpp" line="3736"/>
         <source>Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="187"/>
+        <location filename="../main/MainWindow.cpp" line="194"/>
         <source>Purple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="188"/>
+        <location filename="../main/MainWindow.cpp" line="195"/>
         <source>Orange</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="189"/>
+        <location filename="../main/MainWindow.cpp" line="196"/>
         <source>White</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="190"/>
+        <location filename="../main/MainWindow.cpp" line="197"/>
         <source>Bright Red</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="191"/>
+        <location filename="../main/MainWindow.cpp" line="198"/>
         <source>Bright Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="192"/>
-        <location filename="../main/MainWindow.cpp" line="229"/>
-        <location filename="../main/MainWindow.cpp" line="3466"/>
+        <location filename="../main/MainWindow.cpp" line="199"/>
+        <location filename="../main/MainWindow.cpp" line="3738"/>
         <source>Bright Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="193"/>
+        <location filename="../main/MainWindow.cpp" line="200"/>
         <source>Bright Purple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="194"/>
+        <location filename="../main/MainWindow.cpp" line="201"/>
         <source>Bright Orange</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="391"/>
-        <location filename="../main/MainWindow.cpp" line="1078"/>
-        <location filename="../main/MainWindow.cpp" line="1085"/>
+        <location filename="../main/MainWindow.cpp" line="421"/>
+        <location filename="../main/MainWindow.cpp" line="1216"/>
+        <location filename="../main/MainWindow.cpp" line="1223"/>
         <source>&amp;Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="380"/>
-        <location filename="../main/MainWindow.cpp" line="1486"/>
+        <location filename="../main/MainWindow.cpp" line="410"/>
+        <location filename="../main/MainWindow.cpp" line="1646"/>
         <source>&amp;Transform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="461"/>
+        <location filename="../main/MainWindow.cpp" line="491"/>
         <source>&amp;File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="463"/>
+        <location filename="../main/MainWindow.cpp" line="493"/>
         <source>File Toolbar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="465"/>
+        <location filename="../main/MainWindow.cpp" line="495"/>
         <source>File and Session Management</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="470"/>
+        <location filename="../main/MainWindow.cpp" line="500"/>
         <source>&amp;New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="471"/>
+        <location filename="../main/MainWindow.cpp" line="501"/>
         <source>Ctrl+N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="480"/>
+        <location filename="../main/MainWindow.cpp" line="510"/>
         <source>Ctrl+O</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="479"/>
+        <location filename="../main/MainWindow.cpp" line="509"/>
         <source>&amp;Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="481"/>
+        <location filename="../main/MainWindow.cpp" line="511"/>
         <source>Open a session file, audio file, or layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="519"/>
+        <location filename="../main/MainWindow.cpp" line="549"/>
         <source>&amp;Save Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../main/MainWindow.cpp" line="550"/>
+        <source>Ctrl+S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="559"/>
+        <source>Save Session &amp;As...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="560"/>
+        <source>Ctrl+Shift+S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../main/MainWindow.cpp" line="520"/>
-        <source>Ctrl+S</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="529"/>
-        <source>Save Session &amp;As...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="530"/>
-        <source>Ctrl+Shift+S</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="490"/>
         <source>Ctrl+I</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="554"/>
+        <location filename="../main/MainWindow.cpp" line="584"/>
         <source>&amp;Export Audio File...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="555"/>
+        <location filename="../main/MainWindow.cpp" line="585"/>
         <source>Export selection as an audio file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="568"/>
+        <location filename="../main/MainWindow.cpp" line="598"/>
         <source>Import Annotation &amp;Layer...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="569"/>
+        <location filename="../main/MainWindow.cpp" line="599"/>
         <source>Ctrl+L</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="570"/>
+        <location filename="../main/MainWindow.cpp" line="600"/>
         <source>Import layer data from an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="578"/>
+        <location filename="../main/MainWindow.cpp" line="608"/>
         <source>Export layer data to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="586"/>
+        <location filename="../main/MainWindow.cpp" line="616"/>
         <source>Export Image File...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="587"/>
+        <location filename="../main/MainWindow.cpp" line="617"/>
         <source>Export a single pane to an image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="503"/>
+        <location filename="../main/MainWindow.cpp" line="533"/>
         <source>Open Lo&amp;cation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="247"/>
+        <location filename="../main/MainWindow.cpp" line="248"/>
         <source>Playback Speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="504"/>
+        <location filename="../main/MainWindow.cpp" line="534"/>
         <source>Ctrl+Shift+O</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="505"/>
+        <location filename="../main/MainWindow.cpp" line="535"/>
         <source>Open or import a file from a remote URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="560"/>
+        <location filename="../main/MainWindow.cpp" line="590"/>
         <source>Export Audio Data...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="623"/>
+        <location filename="../main/MainWindow.cpp" line="659"/>
         <source>&amp;Preferences...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="624"/>
+        <location filename="../main/MainWindow.cpp" line="660"/>
         <source>Adjust the application preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="630"/>
+        <location filename="../main/MainWindow.cpp" line="666"/>
         <source>&amp;Quit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="631"/>
+        <location filename="../main/MainWindow.cpp" line="667"/>
         <source>Ctrl+Q</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="643"/>
+        <location filename="../main/MainWindow.cpp" line="679"/>
         <source>&amp;Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="647"/>
+        <location filename="../main/MainWindow.cpp" line="683"/>
         <source>Editing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="654"/>
+        <location filename="../main/MainWindow.cpp" line="690"/>
         <source>Cu&amp;t</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="655"/>
+        <location filename="../main/MainWindow.cpp" line="691"/>
         <source>Ctrl+X</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="656"/>
+        <location filename="../main/MainWindow.cpp" line="692"/>
         <source>Cut the selection from the current layer to the clipboard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="664"/>
+        <location filename="../main/MainWindow.cpp" line="700"/>
         <source>&amp;Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="665"/>
+        <location filename="../main/MainWindow.cpp" line="701"/>
         <source>Ctrl+C</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="666"/>
+        <location filename="../main/MainWindow.cpp" line="702"/>
         <source>Copy the selection from the current layer to the clipboard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="674"/>
+        <location filename="../main/MainWindow.cpp" line="710"/>
         <source>&amp;Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="675"/>
+        <location filename="../main/MainWindow.cpp" line="711"/>
         <source>Ctrl+V</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="676"/>
+        <location filename="../main/MainWindow.cpp" line="712"/>
         <source>Paste from the clipboard to the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="683"/>
+        <location filename="../main/MainWindow.cpp" line="719"/>
         <source>Paste at Playback Position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="684"/>
+        <location filename="../main/MainWindow.cpp" line="720"/>
         <source>Ctrl+Shift+V</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="685"/>
+        <location filename="../main/MainWindow.cpp" line="721"/>
         <source>Paste from the clipboard to the current layer, placing the first item at the playback position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="692"/>
-        <location filename="../main/MainWindow.cpp" line="2342"/>
+        <location filename="../main/MainWindow.cpp" line="728"/>
+        <location filename="../main/MainWindow.cpp" line="2522"/>
         <source>&amp;Delete Selected Items</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="693"/>
+        <location filename="../main/MainWindow.cpp" line="729"/>
         <source>Del</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="694"/>
-        <location filename="../main/MainWindow.cpp" line="2343"/>
+        <location filename="../main/MainWindow.cpp" line="730"/>
+        <location filename="../main/MainWindow.cpp" line="2523"/>
         <source>Delete items in current selection from the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="704"/>
+        <location filename="../main/MainWindow.cpp" line="740"/>
         <source>Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="706"/>
+        <location filename="../main/MainWindow.cpp" line="742"/>
         <source>Select &amp;All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="707"/>
+        <location filename="../main/MainWindow.cpp" line="743"/>
         <source>Ctrl+A</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="708"/>
+        <location filename="../main/MainWindow.cpp" line="744"/>
         <source>Select the whole duration of the current session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="715"/>
+        <location filename="../main/MainWindow.cpp" line="751"/>
         <source>Select &amp;Visible Range</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="716"/>
+        <location filename="../main/MainWindow.cpp" line="752"/>
         <source>Ctrl+Shift+A</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="717"/>
+        <location filename="../main/MainWindow.cpp" line="753"/>
         <source>Select the time range corresponding to the current window width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="723"/>
+        <location filename="../main/MainWindow.cpp" line="759"/>
         <source>Select to &amp;Start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="724"/>
-        <location filename="../main/MainWindow.cpp" line="2158"/>
-        <location filename="../main/MainWindow.cpp" line="2193"/>
-        <location filename="../main/MainWindow.cpp" line="2273"/>
+        <location filename="../main/MainWindow.cpp" line="760"/>
+        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2373"/>
+        <location filename="../main/MainWindow.cpp" line="2453"/>
         <source>Shift+Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="725"/>
+        <location filename="../main/MainWindow.cpp" line="761"/>
         <source>Select from the start of the session to the current playback position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="731"/>
+        <location filename="../main/MainWindow.cpp" line="767"/>
         <source>Select to &amp;End</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="732"/>
+        <location filename="../main/MainWindow.cpp" line="768"/>
         <source>Shift+Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="733"/>
+        <location filename="../main/MainWindow.cpp" line="769"/>
         <source>Select from the current playback position to the end of the session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="739"/>
+        <location filename="../main/MainWindow.cpp" line="775"/>
         <source>C&amp;lear Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="740"/>
+        <location filename="../main/MainWindow.cpp" line="776"/>
         <source>Esc</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="741"/>
+        <location filename="../main/MainWindow.cpp" line="777"/>
         <source>Clear the selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="750"/>
+        <location filename="../main/MainWindow.cpp" line="786"/>
         <source>Tapping Time Instants</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="752"/>
+        <location filename="../main/MainWindow.cpp" line="788"/>
         <source>&amp;Insert Instant at Playback Position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="753"/>
+        <location filename="../main/MainWindow.cpp" line="802"/>
         <source>Enter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="754"/>
+        <location filename="../main/MainWindow.cpp" line="790"/>
         <source>Insert a new time instant at the current playback position, in a new layer if necessary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="761"/>
+        <location filename="../main/MainWindow.cpp" line="789"/>
         <source>;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="766"/>
+        <location filename="../main/MainWindow.cpp" line="807"/>
         <source>Insert Instants at Selection &amp;Boundaries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="767"/>
+        <location filename="../main/MainWindow.cpp" line="815"/>
         <source>Shift+Enter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="768"/>
+        <location filename="../main/MainWindow.cpp" line="809"/>
         <source>Insert new time instants at the start and end of the current selected regions, in a new layer if necessary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="774"/>
+        <location filename="../main/MainWindow.cpp" line="825"/>
         <source>Insert Item at Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="776"/>
+        <location filename="../main/MainWindow.cpp" line="827"/>
         <source>Insert a new note or region item corresponding to the current selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="784"/>
+        <location filename="../main/MainWindow.cpp" line="847"/>
         <source>Number New Instants with</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="804"/>
+        <location filename="../main/MainWindow.cpp" line="867"/>
         <source>Cycle size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="825"/>
+        <location filename="../main/MainWindow.cpp" line="888"/>
         <source>Reset Numbering Counters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="826"/>
+        <location filename="../main/MainWindow.cpp" line="889"/>
         <source>Reset to 1 all the counters used for counter-based labelling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="831"/>
+        <location filename="../main/MainWindow.cpp" line="894"/>
         <source>Set Numbering Counters...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="832"/>
+        <location filename="../main/MainWindow.cpp" line="895"/>
         <source>Set the counters used for counter-based labelling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="836"/>
+        <location filename="../main/MainWindow.cpp" line="899"/>
         <source>Renumber Selected Instants</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="837"/>
+        <location filename="../main/MainWindow.cpp" line="900"/>
         <source>Renumber the selected instants using the current labelling scheme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="853"/>
+        <location filename="../main/MainWindow.cpp" line="930"/>
         <source>Panning and Navigation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="855"/>
+        <location filename="../main/MainWindow.cpp" line="932"/>
         <source>&amp;View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="857"/>
+        <location filename="../main/MainWindow.cpp" line="934"/>
         <source>Scroll &amp;Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="858"/>
-        <location filename="../main/MainWindow.cpp" line="2155"/>
-        <location filename="../main/MainWindow.cpp" line="2181"/>
-        <location filename="../main/MainWindow.cpp" line="2211"/>
-        <location filename="../main/MainWindow.cpp" line="2232"/>
-        <location filename="../main/MainWindow.cpp" line="2250"/>
-        <location filename="../main/MainWindow.cpp" line="2267"/>
+        <location filename="../main/MainWindow.cpp" line="935"/>
+        <location filename="../main/MainWindow.cpp" line="2335"/>
+        <location filename="../main/MainWindow.cpp" line="2361"/>
+        <location filename="../main/MainWindow.cpp" line="2391"/>
+        <location filename="../main/MainWindow.cpp" line="2412"/>
+        <location filename="../main/MainWindow.cpp" line="2430"/>
+        <location filename="../main/MainWindow.cpp" line="2447"/>
         <source>Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="859"/>
+        <location filename="../main/MainWindow.cpp" line="936"/>
         <source>Scroll the current pane to the left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="865"/>
+        <location filename="../main/MainWindow.cpp" line="942"/>
         <source>Scroll &amp;Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="866"/>
+        <location filename="../main/MainWindow.cpp" line="943"/>
         <source>Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="867"/>
+        <location filename="../main/MainWindow.cpp" line="944"/>
         <source>Scroll the current pane to the right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="873"/>
+        <location filename="../main/MainWindow.cpp" line="950"/>
         <source>&amp;Jump Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="874"/>
-        <location filename="../main/MainWindow.cpp" line="2185"/>
-        <location filename="../main/MainWindow.cpp" line="2189"/>
+        <location filename="../main/MainWindow.cpp" line="951"/>
+        <location filename="../main/MainWindow.cpp" line="2365"/>
+        <location filename="../main/MainWindow.cpp" line="2369"/>
         <source>Ctrl+Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="875"/>
+        <location filename="../main/MainWindow.cpp" line="952"/>
         <source>Scroll the current pane a big step to the left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="881"/>
+        <location filename="../main/MainWindow.cpp" line="958"/>
         <source>J&amp;ump Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="882"/>
+        <location filename="../main/MainWindow.cpp" line="959"/>
         <source>Ctrl+Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="883"/>
+        <location filename="../main/MainWindow.cpp" line="960"/>
         <source>Scroll the current pane a big step to the right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="889"/>
+        <location filename="../main/MainWindow.cpp" line="966"/>
         <source>Peek Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="890"/>
+        <location filename="../main/MainWindow.cpp" line="967"/>
         <source>Alt+Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="891"/>
+        <location filename="../main/MainWindow.cpp" line="968"/>
         <source>Scroll the current pane to the left without moving the playback cursor or other panes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="897"/>
+        <location filename="../main/MainWindow.cpp" line="974"/>
         <source>Peek Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="898"/>
+        <location filename="../main/MainWindow.cpp" line="975"/>
         <source>Alt+Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="899"/>
+        <location filename="../main/MainWindow.cpp" line="976"/>
         <source>Scroll the current pane to the right without moving the playback cursor or other panes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="907"/>
+        <location filename="../main/MainWindow.cpp" line="984"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="910"/>
+        <location filename="../main/MainWindow.cpp" line="987"/>
         <source>Zoom &amp;In</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="911"/>
+        <location filename="../main/MainWindow.cpp" line="988"/>
         <source>Up</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="912"/>
+        <location filename="../main/MainWindow.cpp" line="989"/>
         <source>Increase the zoom level</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="919"/>
+        <location filename="../main/MainWindow.cpp" line="996"/>
         <source>Zoom &amp;Out</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="920"/>
+        <location filename="../main/MainWindow.cpp" line="997"/>
         <source>Down</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="921"/>
+        <location filename="../main/MainWindow.cpp" line="998"/>
         <source>Decrease the zoom level</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="927"/>
+        <location filename="../main/MainWindow.cpp" line="1004"/>
         <source>Restore &amp;Default Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="928"/>
+        <location filename="../main/MainWindow.cpp" line="1005"/>
         <source>Restore the zoom level to the default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="934"/>
+        <location filename="../main/MainWindow.cpp" line="1011"/>
         <source>Zoom to &amp;Fit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="935"/>
+        <location filename="../main/MainWindow.cpp" line="1012"/>
         <source>F</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="936"/>
+        <location filename="../main/MainWindow.cpp" line="1013"/>
         <source>Zoom to show the whole file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="944"/>
+        <location filename="../main/MainWindow.cpp" line="1021"/>
         <source>Display Features</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="946"/>
+        <location filename="../main/MainWindow.cpp" line="1023"/>
         <source>Show &amp;Centre Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="947"/>
+        <location filename="../main/MainWindow.cpp" line="1024"/>
         <source>&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="948"/>
+        <location filename="../main/MainWindow.cpp" line="1025"/>
         <source>Show or hide the centre line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="955"/>
+        <location filename="../main/MainWindow.cpp" line="1032"/>
         <source>Toggle All Time Rulers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="968"/>
+        <location filename="../main/MainWindow.cpp" line="1045"/>
         <source>Show &amp;No Overlays</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="969"/>
+        <location filename="../main/MainWindow.cpp" line="1046"/>
         <source>0</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2537,12 +2574,12 @@
         <translation type="obsolete">Hide center indicator, frame times, layer names and scale</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="978"/>
+        <location filename="../main/MainWindow.cpp" line="1055"/>
         <source>Show &amp;Minimal Overlays</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="979"/>
+        <location filename="../main/MainWindow.cpp" line="1056"/>
         <source>9</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2551,7 +2588,7 @@
         <translation type="obsolete">Show center indicator only</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="989"/>
+        <location filename="../main/MainWindow.cpp" line="1066"/>
         <source>8</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2560,1931 +2597,2084 @@
         <translation type="obsolete">Show center indicator, frame times and scale</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="988"/>
+        <location filename="../main/MainWindow.cpp" line="1065"/>
         <source>Show &amp;All Overlays</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="956"/>
+        <location filename="../main/MainWindow.cpp" line="1033"/>
         <source>#</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="561"/>
+        <location filename="../main/MainWindow.cpp" line="591"/>
         <source>Export audio from selection into a data file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="576"/>
+        <location filename="../main/MainWindow.cpp" line="606"/>
         <source>Export Annotation La&amp;yer...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="577"/>
+        <location filename="../main/MainWindow.cpp" line="607"/>
         <source>Ctrl+Y</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="594"/>
+        <location filename="../main/MainWindow.cpp" line="622"/>
+        <source>Export SVG File...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="623"/>
+        <source>Export a single pane to a scalable SVG image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="630"/>
         <source>Browse Recorded Audio Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="595"/>
+        <location filename="../main/MainWindow.cpp" line="631"/>
         <source>Open the Recorded Audio folder in the system file browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="775"/>
+        <location filename="../main/MainWindow.cpp" line="808"/>
+        <source>Shift+;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="826"/>
+        <source>Ctrl+Shift+;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="833"/>
+        <source>Ctrl+Shift+Enter</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="838"/>
         <source>Ctrl+Shift+Return</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="957"/>
+        <location filename="../main/MainWindow.cpp" line="908"/>
+        <source>Subdivide Selected Instants...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="909"/>
+        <source>Add new instants at regular intervals between the selected instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="914"/>
+        <source>Winnow Selected Instants...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="915"/>
+        <source>Remove subdivisions, leaving only every Nth instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1034"/>
         <source>Show or hide all time rulers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="970"/>
+        <location filename="../main/MainWindow.cpp" line="1047"/>
         <source>Hide times, layer names, and scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="980"/>
+        <location filename="../main/MainWindow.cpp" line="1057"/>
         <source>Show times and basic scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="990"/>
+        <location filename="../main/MainWindow.cpp" line="1067"/>
         <source>Show times, layer names, and scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1000"/>
+        <location filename="../main/MainWindow.cpp" line="1077"/>
         <source>Show &amp;Zoom Wheels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1001"/>
+        <location filename="../main/MainWindow.cpp" line="1078"/>
         <source>Z</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1002"/>
+        <location filename="../main/MainWindow.cpp" line="1079"/>
         <source>Show thumbwheels for zooming horizontally and vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1009"/>
+        <location filename="../main/MainWindow.cpp" line="1086"/>
         <source>Show Property Bo&amp;xes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1010"/>
+        <location filename="../main/MainWindow.cpp" line="1087"/>
         <source>X</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1011"/>
+        <location filename="../main/MainWindow.cpp" line="1088"/>
         <source>Show the layer property boxes at the side of the main window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1018"/>
+        <location filename="../main/MainWindow.cpp" line="1095"/>
         <source>Show Status &amp;Bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1019"/>
+        <location filename="../main/MainWindow.cpp" line="1096"/>
         <source>Show context help information in the status bar at the bottom of the window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1036"/>
+        <location filename="../main/MainWindow.cpp" line="1113"/>
         <source>Show La&amp;yer Summary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1037"/>
+        <location filename="../main/MainWindow.cpp" line="1114"/>
         <source>Y</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1038"/>
+        <location filename="../main/MainWindow.cpp" line="1115"/>
         <source>Open a window displaying the hierarchy of panes and layers in this session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1043"/>
+        <location filename="../main/MainWindow.cpp" line="1120"/>
         <source>Show Acti&amp;vity Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1044"/>
+        <location filename="../main/MainWindow.cpp" line="1121"/>
         <source>Open a window listing interactions and other events</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1048"/>
+        <location filename="../main/MainWindow.cpp" line="1125"/>
         <source>Show &amp;Unit Converter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1049"/>
+        <location filename="../main/MainWindow.cpp" line="1126"/>
         <source>Open a window of pitch and timing conversion utilities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1055"/>
+        <location filename="../main/MainWindow.cpp" line="1135"/>
         <source>Go Full-Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1056"/>
+        <location filename="../main/MainWindow.cpp" line="1136"/>
         <source>F11</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1057"/>
+        <location filename="../main/MainWindow.cpp" line="1137"/>
         <source>Expand the pane area to the whole screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1070"/>
+        <location filename="../main/MainWindow.cpp" line="1208"/>
         <source>&amp;Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1094"/>
+        <location filename="../main/MainWindow.cpp" line="1232"/>
         <source>Managing Panes and Layers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1096"/>
+        <location filename="../main/MainWindow.cpp" line="1234"/>
         <source>Add &amp;New Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1097"/>
+        <location filename="../main/MainWindow.cpp" line="1235"/>
         <source>N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1098"/>
+        <location filename="../main/MainWindow.cpp" line="1236"/>
         <source>Add a new pane containing only a time ruler</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1124"/>
+        <location filename="../main/MainWindow.cpp" line="1260"/>
         <source>Add New %1 Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1125"/>
+        <location filename="../main/MainWindow.cpp" line="1261"/>
         <source>Add a new empty layer of type %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1131"/>
+        <location filename="../main/MainWindow.cpp" line="1267"/>
         <source>T</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1186"/>
+        <location filename="../main/MainWindow.cpp" line="1326"/>
         <source>Add &amp;Waveform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../main/MainWindow.cpp" line="1156"/>
+        <source>W</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1328"/>
+        <source>Add a new pane showing a waveform view</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1158"/>
+        <source>Shift+W</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1330"/>
+        <source>Add a new layer showing a waveform view</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1337"/>
+        <source>Add Spectro&amp;gram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1164"/>
+        <source>G</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1339"/>
+        <source>Add a new pane showing a spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1166"/>
+        <source>Shift+G</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1341"/>
+        <source>Add a new layer showing a spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1347"/>
+        <source>Add &amp;Melodic Range Spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1172"/>
+        <source>M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1349"/>
+        <source>Add a new pane showing a spectrogram set up for an overview of note pitches</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1174"/>
+        <source>Shift+M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1351"/>
+        <source>Add a new layer showing a spectrogram set up for an overview of note pitches</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1357"/>
+        <source>Add Pea&amp;k Frequency Spectrogram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1180"/>
+        <source>K</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1359"/>
+        <source>Add a new pane showing a spectrogram set up for tracking frequencies</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1182"/>
+        <source>Shift+K</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1361"/>
+        <source>Add a new layer showing a spectrogram set up for tracking frequencies</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1367"/>
+        <source>Add Spectr&amp;um</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../main/MainWindow.cpp" line="1188"/>
-        <source>W</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1189"/>
-        <source>Add a new pane showing a waveform view</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1191"/>
-        <source>Shift+W</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1192"/>
-        <source>Add a new layer showing a waveform view</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1199"/>
-        <source>Add Spectro&amp;gram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1201"/>
-        <source>G</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1202"/>
-        <source>Add a new pane showing a spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1204"/>
-        <source>Shift+G</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1205"/>
-        <source>Add a new layer showing a spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1211"/>
-        <source>Add &amp;Melodic Range Spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1213"/>
-        <source>M</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1214"/>
-        <source>Add a new pane showing a spectrogram set up for an overview of note pitches</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1216"/>
-        <source>Shift+M</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1217"/>
-        <source>Add a new layer showing a spectrogram set up for an overview of note pitches</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1223"/>
-        <source>Add Pea&amp;k Frequency Spectrogram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1225"/>
-        <source>K</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1226"/>
-        <source>Add a new pane showing a spectrogram set up for tracking frequencies</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1228"/>
-        <source>Shift+K</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1229"/>
-        <source>Add a new layer showing a spectrogram set up for tracking frequencies</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1235"/>
-        <source>Add Spectr&amp;um</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1237"/>
         <source>U</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1238"/>
+        <location filename="../main/MainWindow.cpp" line="1369"/>
         <source>Add a new pane showing a frequency spectrum</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1240"/>
+        <location filename="../main/MainWindow.cpp" line="1190"/>
         <source>Shift+U</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1241"/>
+        <location filename="../main/MainWindow.cpp" line="1371"/>
         <source>Add a new layer showing a frequency spectrum</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1311"/>
+        <location filename="../main/MainWindow.cpp" line="1441"/>
         <source>&amp;All Channels Mixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1313"/>
+        <location filename="../main/MainWindow.cpp" line="1443"/>
         <source>&amp;All Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1316"/>
+        <location filename="../main/MainWindow.cpp" line="1446"/>
         <source>Channel &amp;%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1320"/>
-        <location filename="../main/MainWindow.cpp" line="3447"/>
+        <location filename="../main/MainWindow.cpp" line="1450"/>
+        <location filename="../main/MainWindow.cpp" line="3710"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1379"/>
+        <location filename="../main/MainWindow.cpp" line="1509"/>
         <source>Switch to Previous Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1380"/>
+        <location filename="../main/MainWindow.cpp" line="1510"/>
         <source>[</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1381"/>
+        <location filename="../main/MainWindow.cpp" line="1511"/>
         <source>Make the next pane up in the pane stack current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1387"/>
+        <location filename="../main/MainWindow.cpp" line="1517"/>
         <source>Switch to Next Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1388"/>
+        <location filename="../main/MainWindow.cpp" line="1518"/>
         <source>]</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1389"/>
+        <location filename="../main/MainWindow.cpp" line="1519"/>
         <source>Make the next pane down in the pane stack current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1397"/>
+        <location filename="../main/MainWindow.cpp" line="1527"/>
         <source>&amp;Delete Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1398"/>
+        <location filename="../main/MainWindow.cpp" line="1528"/>
         <source>Ctrl+Shift+D</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1399"/>
+        <location filename="../main/MainWindow.cpp" line="1529"/>
         <source>Delete the currently active pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1407"/>
+        <location filename="../main/MainWindow.cpp" line="1537"/>
         <source>Add &amp;Time Ruler</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1408"/>
+        <location filename="../main/MainWindow.cpp" line="1538"/>
         <source>Add a new layer showing a time ruler</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1416"/>
+        <location filename="../main/MainWindow.cpp" line="1546"/>
         <source>Add &amp;Existing Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1420"/>
+        <location filename="../main/MainWindow.cpp" line="1550"/>
         <source>Add S&amp;lice of Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1428"/>
+        <location filename="../main/MainWindow.cpp" line="1558"/>
         <source>Switch to Previous Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1429"/>
+        <location filename="../main/MainWindow.cpp" line="1559"/>
         <source>{</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1430"/>
+        <location filename="../main/MainWindow.cpp" line="1560"/>
         <source>Make the previous layer in the pane current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1436"/>
+        <location filename="../main/MainWindow.cpp" line="1566"/>
         <source>Switch to Next Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1437"/>
+        <location filename="../main/MainWindow.cpp" line="1567"/>
         <source>}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1438"/>
+        <location filename="../main/MainWindow.cpp" line="1568"/>
         <source>Make the next layer in the pane current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1447"/>
+        <location filename="../main/MainWindow.cpp" line="1577"/>
         <source>&amp;Rename Layer...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1448"/>
+        <location filename="../main/MainWindow.cpp" line="1578"/>
         <source>R</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1449"/>
+        <location filename="../main/MainWindow.cpp" line="1579"/>
         <source>Rename the currently active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1455"/>
+        <location filename="../main/MainWindow.cpp" line="1585"/>
         <source>Edit Layer Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1456"/>
+        <location filename="../main/MainWindow.cpp" line="1586"/>
         <source>E</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1457"/>
+        <location filename="../main/MainWindow.cpp" line="1587"/>
         <source>Edit the currently active layer as a data grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1463"/>
+        <location filename="../main/MainWindow.cpp" line="1593"/>
         <source>&amp;Delete Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1464"/>
+        <location filename="../main/MainWindow.cpp" line="1594"/>
         <source>Ctrl+D</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1465"/>
+        <location filename="../main/MainWindow.cpp" line="1595"/>
         <source>Delete the currently active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1504"/>
+        <location filename="../main/MainWindow.cpp" line="1669"/>
         <source>&amp;Recent Transforms</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1521"/>
+        <location filename="../main/MainWindow.cpp" line="1686"/>
         <source>%1 by Category</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1536"/>
-        <location filename="../main/MainWindow.cpp" line="1624"/>
+        <location filename="../main/MainWindow.cpp" line="1701"/>
+        <location filename="../main/MainWindow.cpp" line="1789"/>
         <source>Unclassified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1567"/>
+        <location filename="../main/MainWindow.cpp" line="1732"/>
         <source>%1 by Plugin Name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1575"/>
+        <location filename="../main/MainWindow.cpp" line="1740"/>
         <source>%1 by Maker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1589"/>
-        <location filename="../main/MainWindow.cpp" line="1627"/>
+        <location filename="../main/MainWindow.cpp" line="1754"/>
+        <location filename="../main/MainWindow.cpp" line="1792"/>
         <source>Unknown</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1590"/>
-        <location filename="../main/MainWindow.cpp" line="1628"/>
+        <location filename="../main/MainWindow.cpp" line="1755"/>
+        <location filename="../main/MainWindow.cpp" line="1793"/>
         <source> [\(&lt;].*$</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1643"/>
-        <location filename="../main/MainWindow.cpp" line="1669"/>
+        <location filename="../main/MainWindow.cpp" line="1808"/>
+        <location filename="../main/MainWindow.cpp" line="1834"/>
         <source>%1...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1708"/>
+        <location filename="../main/MainWindow.cpp" line="1873"/>
         <source>Find a Transform...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1709"/>
+        <location filename="../main/MainWindow.cpp" line="1874"/>
         <source>Search for a transform from the installed plugins, by name or description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1710"/>
+        <location filename="../main/MainWindow.cpp" line="1875"/>
         <source>Ctrl+M</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1723"/>
+        <location filename="../main/MainWindow.cpp" line="1888"/>
         <source>&amp;Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1726"/>
+        <location filename="../main/MainWindow.cpp" line="1891"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1733"/>
+        <location filename="../main/MainWindow.cpp" line="1898"/>
         <source>&amp;Help Reference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1734"/>
+        <location filename="../main/MainWindow.cpp" line="1899"/>
         <source>F1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1740"/>
+        <location filename="../main/MainWindow.cpp" line="1905"/>
         <source>&amp;Key and Mouse Reference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1741"/>
+        <location filename="../main/MainWindow.cpp" line="1906"/>
         <source>F2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1767"/>
+        <location filename="../main/MainWindow.cpp" line="1917"/>
+        <source>What&apos;s &amp;New?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1918"/>
+        <source>Show changes in this release of %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1940"/>
         <source>Ctrl+R</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1769"/>
+        <location filename="../main/MainWindow.cpp" line="1942"/>
         <source>Re-open</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1771"/>
+        <location filename="../main/MainWindow.cpp" line="1944"/>
         <source>Re-open the current or most recently opened file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1782"/>
+        <location filename="../main/MainWindow.cpp" line="1955"/>
         <source>Standard Waveform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1818"/>
+        <location filename="../main/MainWindow.cpp" line="1991"/>
         <source>Choose Default Template...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1843"/>
+        <location filename="../main/MainWindow.cpp" line="2016"/>
         <source>Ctrl+T</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1845"/>
+        <location filename="../main/MainWindow.cpp" line="2018"/>
         <source>Repeat Transform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1847"/>
+        <location filename="../main/MainWindow.cpp" line="2020"/>
         <source>Re-select the most recently run transform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1937"/>
+        <location filename="../main/MainWindow.cpp" line="2110"/>
         <source>Playback and Transport Controls</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1941"/>
+        <location filename="../main/MainWindow.cpp" line="2114"/>
         <source>Play&amp;back</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1944"/>
+        <location filename="../main/MainWindow.cpp" line="2117"/>
         <source>Playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1946"/>
+        <location filename="../main/MainWindow.cpp" line="2119"/>
         <source>Playback Toolbar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1949"/>
+        <location filename="../main/MainWindow.cpp" line="2122"/>
         <source>Rewind to Start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1950"/>
+        <location filename="../main/MainWindow.cpp" line="2123"/>
         <source>Home</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1951"/>
+        <location filename="../main/MainWindow.cpp" line="2124"/>
         <source>Rewind to the start</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1955"/>
-        <location filename="../main/MainWindow.cpp" line="2360"/>
+        <location filename="../main/MainWindow.cpp" line="2128"/>
+        <location filename="../main/MainWindow.cpp" line="2540"/>
+        <location filename="../main/MainWindow.cpp" line="2541"/>
+        <source>Rewind</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2129"/>
+        <source>PgUp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2130"/>
+        <source>Rewind to the previous time instant or time ruler notch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2134"/>
+        <source>Rewind to Similar Point</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2135"/>
+        <source>Shift+PgUp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2136"/>
+        <source>Rewind to the previous similarly valued time instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2141"/>
+        <source>Play / Pause</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2149"/>
+        <source>Space</source>
+        <extracomment>This text is a shortcut label referring to the space-bar on the keyboard. It probably should not be translated, and certainly should not be translated as if referring to an empty void or to the extra-terrestrial universe.</extracomment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2151"/>
+        <source>Start or stop playback from the current position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2160"/>
+        <location filename="../main/MainWindow.cpp" line="2538"/>
+        <source>Fast Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2161"/>
+        <source>PgDown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2162"/>
+        <source>Fast-forward to the next time instant or time ruler notch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2166"/>
+        <source>Fast Forward to Similar Point</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2167"/>
+        <source>Shift+PgDown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2168"/>
+        <source>Fast-forward to the next similarly valued time instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2173"/>
+        <source>Fast Forward to End</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2174"/>
+        <source>End</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2175"/>
+        <source>Fast-forward to the end</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2180"/>
+        <source>Record</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2182"/>
+        <source>Ctrl+Space</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2183"/>
+        <source>Record a new audio file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2190"/>
+        <source>Play Mode Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2193"/>
+        <source>Constrain Playback to Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2196"/>
+        <source>s</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2197"/>
+        <source>Constrain playback to the selected regions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2204"/>
+        <source>Loop Playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2207"/>
+        <source>l</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2208"/>
+        <source>Loop playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2215"/>
+        <source>Solo Current Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2219"/>
+        <source>o</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2220"/>
+        <source>Solo the current pane during playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2229"/>
+        <source>Align File Timelines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2232"/>
+        <source>Treat multiple audio files as versions of the same work, and align their timelines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2287"/>
+        <source>Speed Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2288"/>
+        <source>Ctrl+PgUp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2289"/>
+        <source>Time-stretch playback to speed it up without changing pitch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2293"/>
+        <source>Slow Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2294"/>
+        <source>Ctrl+PgDown</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2295"/>
+        <source>Time-stretch playback to slow it down without changing pitch</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2299"/>
+        <source>Restore Normal Speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2300"/>
+        <source>Ctrl+Home</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2301"/>
+        <source>Restore non-time-stretched playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2313"/>
+        <source>Edit Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2319"/>
+        <location filename="../main/MainWindow.cpp" line="2347"/>
+        <location filename="../main/MainWindow.cpp" line="2376"/>
+        <location filename="../main/MainWindow.cpp" line="2397"/>
+        <location filename="../main/MainWindow.cpp" line="2415"/>
+        <location filename="../main/MainWindow.cpp" line="2433"/>
+        <source>Tool Selection</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3124"/>
+        <source>Export the whole pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3125"/>
+        <source>Export the visible area only</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3135"/>
+        <source>Which region of the current pane do you want to export as a scalable SVG image?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3163"/>
+        <source>Failed to save SVG file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3164"/>
+        <source>Failed to save SVG file %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4030"/>
+        <source>Failed to query transform attributes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4031"/>
+        <source>&lt;b&gt;Failed to query transform attributes&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4102"/>
+        <source>Multiplexed audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4124"/>
+        <source>Transform failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4125"/>
+        <source>&lt;b&gt;Failed to run transform&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4242"/>
+        <source>Playback speed: %1% (%2x slower)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4248"/>
+        <source>Playback speed: %1% (%2x faster)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4720"/>
+        <source>Subdivide instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4721"/>
+        <source>Number of subdivisions:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4742"/>
+        <source>Winnow instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4743"/>
+        <source>Remove all instants apart from multiples of:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4769"/>
+        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4776"/>
+        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4832"/>
+        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment:&lt;p&gt;%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4917"/>
+        <source>Adjust the master playback level and pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5038"/>
+        <source>With Qt v%1 &amp;copy; The Qt Company</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5096"/>
+        <source>&lt;br&gt;With Rubber Band Library v%1 &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5098"/>
+        <source>&lt;br&gt;With Rubber Band Library &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5101"/>
+        <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam and QMUL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5102"/>
+        <source>&lt;br&gt;With Piper Vamp protocol bridge &amp;copy; QMUL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5111"/>
+        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5112"/>
+        <source>&lt;br&gt;With Cap&apos;n Proto serialisation &amp;copy; Sandstorm Development Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5126"/>
+        <source>Russian UI translation contributed by Alexandre Prokoudine.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5128"/>
+        <source>Czech UI translation contributed by Pavel Fric.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5215"/>
+        <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2316"/>
+        <source>Tools Toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2321"/>
+        <location filename="../main/MainWindow.cpp" line="2325"/>
+        <location filename="../main/MainWindow.cpp" line="2335"/>
+        <source>Navigate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2324"/>
+        <source>1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2349"/>
         <location filename="../main/MainWindow.cpp" line="2361"/>
-        <source>Rewind</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1956"/>
-        <source>PgUp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1957"/>
-        <source>Rewind to the previous time instant or time ruler notch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1961"/>
-        <source>Rewind to Similar Point</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1962"/>
-        <source>Shift+PgUp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1963"/>
-        <source>Rewind to the previous similarly valued time instant</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1968"/>
-        <source>Play / Pause</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1970"/>
-        <source>Space</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1971"/>
-        <source>Start or stop playback from the current position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1980"/>
-        <location filename="../main/MainWindow.cpp" line="2358"/>
-        <source>Fast Forward</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1981"/>
-        <source>PgDown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1982"/>
-        <source>Fast-forward to the next time instant or time ruler notch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1986"/>
-        <source>Fast Forward to Similar Point</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1987"/>
-        <source>Shift+PgDown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1988"/>
-        <source>Fast-forward to the next similarly valued time instant</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1993"/>
-        <source>Fast Forward to End</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1994"/>
-        <source>End</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1995"/>
-        <source>Fast-forward to the end</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2000"/>
-        <source>Record</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2002"/>
-        <source>Ctrl+Space</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2003"/>
-        <source>Record a new audio file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2010"/>
-        <source>Play Mode Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2013"/>
-        <source>Constrain Playback to Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2016"/>
-        <source>s</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2017"/>
-        <source>Constrain playback to the selected regions</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2024"/>
-        <source>Loop Playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2027"/>
-        <source>l</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2028"/>
-        <source>Loop playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2035"/>
-        <source>Solo Current Pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2039"/>
-        <source>o</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2040"/>
-        <source>Solo the current pane during playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2049"/>
-        <source>Align File Timelines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2052"/>
-        <source>Treat multiple audio files as versions of the same work, and align their timelines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2107"/>
-        <source>Speed Up</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2108"/>
-        <source>Ctrl+PgUp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2109"/>
-        <source>Time-stretch playback to speed it up without changing pitch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2113"/>
-        <source>Slow Down</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2114"/>
-        <source>Ctrl+PgDown</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2115"/>
-        <source>Time-stretch playback to slow it down without changing pitch</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2119"/>
-        <source>Restore Normal Speed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2120"/>
-        <source>Ctrl+Home</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2121"/>
-        <source>Restore non-time-stretched playback</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2133"/>
-        <source>Edit Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2139"/>
-        <location filename="../main/MainWindow.cpp" line="2167"/>
-        <location filename="../main/MainWindow.cpp" line="2196"/>
-        <location filename="../main/MainWindow.cpp" line="2217"/>
-        <location filename="../main/MainWindow.cpp" line="2235"/>
-        <location filename="../main/MainWindow.cpp" line="2253"/>
-        <source>Tool Selection</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3937"/>
-        <source>Playback speed: %1% (%2x slower)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3943"/>
-        <source>Playback speed: %1% (%2x faster)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4377"/>
-        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4384"/>
-        <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4697"/>
-        <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2136"/>
-        <source>Tools Toolbar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2141"/>
-        <location filename="../main/MainWindow.cpp" line="2145"/>
-        <location filename="../main/MainWindow.cpp" line="2155"/>
-        <source>Navigate</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2144"/>
-        <source>1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2169"/>
-        <location filename="../main/MainWindow.cpp" line="2181"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2171"/>
+        <location filename="../main/MainWindow.cpp" line="2351"/>
         <source>2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2172"/>
+        <location filename="../main/MainWindow.cpp" line="2352"/>
         <source>Select ranges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2164"/>
-        <location filename="../main/MainWindow.cpp" line="2198"/>
-        <location filename="../main/MainWindow.cpp" line="2214"/>
+        <location filename="../main/MainWindow.cpp" line="2344"/>
+        <location filename="../main/MainWindow.cpp" line="2378"/>
+        <location filename="../main/MainWindow.cpp" line="2394"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2153"/>
+        <location filename="../main/MainWindow.cpp" line="2333"/>
         <source>Navigate Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2156"/>
+        <location filename="../main/MainWindow.cpp" line="2336"/>
         <source>Click left button and drag to move around</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2158"/>
-        <location filename="../main/MainWindow.cpp" line="2273"/>
+        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2453"/>
         <source>Zoom to Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2159"/>
-        <location filename="../main/MainWindow.cpp" line="2274"/>
+        <location filename="../main/MainWindow.cpp" line="2339"/>
+        <location filename="../main/MainWindow.cpp" line="2454"/>
         <source>Shift-click left button and drag to zoom to a rectangular area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2161"/>
+        <location filename="../main/MainWindow.cpp" line="2341"/>
         <source>Relocate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2161"/>
-        <location filename="../main/MainWindow.cpp" line="2164"/>
-        <location filename="../main/MainWindow.cpp" line="2214"/>
-        <location filename="../main/MainWindow.cpp" line="2270"/>
+        <location filename="../main/MainWindow.cpp" line="2341"/>
+        <location filename="../main/MainWindow.cpp" line="2344"/>
+        <location filename="../main/MainWindow.cpp" line="2394"/>
+        <location filename="../main/MainWindow.cpp" line="2450"/>
         <source>Double-Click Left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2162"/>
+        <location filename="../main/MainWindow.cpp" line="2342"/>
         <source>Double-click left button to jump to clicked location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2165"/>
-        <location filename="../main/MainWindow.cpp" line="2215"/>
+        <location filename="../main/MainWindow.cpp" line="2345"/>
+        <location filename="../main/MainWindow.cpp" line="2395"/>
         <source>Double-click left button on an item to edit it</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2179"/>
+        <location filename="../main/MainWindow.cpp" line="2359"/>
         <source>Select Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2182"/>
+        <location filename="../main/MainWindow.cpp" line="2362"/>
         <source>Click left button and drag to select region; drag region edge to resize</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2185"/>
-        <location filename="../main/MainWindow.cpp" line="2189"/>
+        <location filename="../main/MainWindow.cpp" line="2365"/>
+        <location filename="../main/MainWindow.cpp" line="2369"/>
         <source>Multi Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2186"/>
+        <location filename="../main/MainWindow.cpp" line="2366"/>
         <source>Cmd-click left button and drag to select an additional region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2190"/>
+        <location filename="../main/MainWindow.cpp" line="2370"/>
         <source>Ctrl-click left button and drag to select an additional region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2193"/>
+        <location filename="../main/MainWindow.cpp" line="2373"/>
         <source>Fine Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2194"/>
+        <location filename="../main/MainWindow.cpp" line="2374"/>
         <source>Shift-click left button and drag to select without snapping to items or grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2200"/>
+        <location filename="../main/MainWindow.cpp" line="2380"/>
         <source>3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2201"/>
+        <location filename="../main/MainWindow.cpp" line="2381"/>
         <source>Edit items in layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2209"/>
+        <location filename="../main/MainWindow.cpp" line="2389"/>
         <source>Edit Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2211"/>
+        <location filename="../main/MainWindow.cpp" line="2391"/>
         <source>Move</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2212"/>
+        <location filename="../main/MainWindow.cpp" line="2392"/>
         <source>Click left button on an item or selected region and drag to move</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2219"/>
-        <location filename="../main/MainWindow.cpp" line="2232"/>
+        <location filename="../main/MainWindow.cpp" line="2399"/>
+        <location filename="../main/MainWindow.cpp" line="2412"/>
         <source>Draw</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2221"/>
+        <location filename="../main/MainWindow.cpp" line="2401"/>
         <source>4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2222"/>
+        <location filename="../main/MainWindow.cpp" line="2402"/>
         <source>Draw new items in layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2230"/>
+        <location filename="../main/MainWindow.cpp" line="2410"/>
         <source>Draw Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2233"/>
+        <location filename="../main/MainWindow.cpp" line="2413"/>
         <source>Click left button and drag to create new item</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2237"/>
-        <location filename="../main/MainWindow.cpp" line="2250"/>
+        <location filename="../main/MainWindow.cpp" line="2417"/>
+        <location filename="../main/MainWindow.cpp" line="2430"/>
         <source>Erase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2239"/>
+        <location filename="../main/MainWindow.cpp" line="2419"/>
         <source>5</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2240"/>
+        <location filename="../main/MainWindow.cpp" line="2420"/>
         <source>Erase items from layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2248"/>
+        <location filename="../main/MainWindow.cpp" line="2428"/>
         <source>Erase Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2251"/>
+        <location filename="../main/MainWindow.cpp" line="2431"/>
         <source>Click left button on an item to remove it from the layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2254"/>
+        <location filename="../main/MainWindow.cpp" line="2434"/>
         <source>Measure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2256"/>
+        <location filename="../main/MainWindow.cpp" line="2436"/>
         <source>6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2257"/>
+        <location filename="../main/MainWindow.cpp" line="2437"/>
         <source>Make measurements in layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2265"/>
+        <location filename="../main/MainWindow.cpp" line="2445"/>
         <source>Measure Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2267"/>
+        <location filename="../main/MainWindow.cpp" line="2447"/>
         <source>Measure Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2268"/>
+        <location filename="../main/MainWindow.cpp" line="2448"/>
         <source>Click left button and drag to measure a rectangular area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2270"/>
+        <location filename="../main/MainWindow.cpp" line="2450"/>
         <source>Measure Item</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2271"/>
+        <location filename="../main/MainWindow.cpp" line="2451"/>
         <source>Click left button and drag to measure extents of an item or shape</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2518"/>
         <source>&amp;Delete Current Measurement</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2339"/>
+        <location filename="../main/MainWindow.cpp" line="2519"/>
         <source>Delete the measurement currently under the mouse pointer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2348"/>
+        <location filename="../main/MainWindow.cpp" line="2528"/>
         <source>Fast Forward to Next Instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2349"/>
+        <location filename="../main/MainWindow.cpp" line="2529"/>
         <source>Fast forward to the next time instant in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2350"/>
+        <location filename="../main/MainWindow.cpp" line="2530"/>
         <source>Rewind to Previous Instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2351"/>
+        <location filename="../main/MainWindow.cpp" line="2531"/>
         <source>Rewind to the previous time instant in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2353"/>
+        <location filename="../main/MainWindow.cpp" line="2533"/>
         <source>Fast Forward to Next Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2354"/>
+        <location filename="../main/MainWindow.cpp" line="2534"/>
         <source>Fast forward to the next point in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2355"/>
+        <location filename="../main/MainWindow.cpp" line="2535"/>
         <source>Rewind to Previous Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2356"/>
+        <location filename="../main/MainWindow.cpp" line="2536"/>
         <source>Rewind to the previous point in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2359"/>
+        <location filename="../main/MainWindow.cpp" line="2539"/>
         <source>Fast forward</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2370"/>
+        <location filename="../main/MainWindow.cpp" line="2550"/>
         <source>No audio file loaded.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2381"/>
+        <location filename="../main/MainWindow.cpp" line="2563"/>
         <source>%1Hz (resampling to %2Hz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2452"/>
-        <location filename="../main/MainWindow.cpp" line="2466"/>
-        <location filename="../main/MainWindow.cpp" line="2480"/>
-        <location filename="../main/MainWindow.cpp" line="2717"/>
-        <location filename="../main/MainWindow.cpp" line="2722"/>
-        <location filename="../main/MainWindow.cpp" line="3031"/>
-        <location filename="../main/MainWindow.cpp" line="3035"/>
+        <location filename="../main/MainWindow.cpp" line="2634"/>
+        <location filename="../main/MainWindow.cpp" line="2648"/>
+        <location filename="../main/MainWindow.cpp" line="2662"/>
+        <location filename="../main/MainWindow.cpp" line="2907"/>
+        <location filename="../main/MainWindow.cpp" line="2912"/>
+        <location filename="../main/MainWindow.cpp" line="3287"/>
+        <location filename="../main/MainWindow.cpp" line="3291"/>
         <source>Failed to open file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2453"/>
-        <location filename="../main/MainWindow.cpp" line="2467"/>
-        <location filename="../main/MainWindow.cpp" line="2481"/>
+        <location filename="../main/MainWindow.cpp" line="2635"/>
+        <location filename="../main/MainWindow.cpp" line="2649"/>
+        <location filename="../main/MainWindow.cpp" line="2663"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Audio file &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2529"/>
+        <location filename="../main/MainWindow.cpp" line="2711"/>
         <source>1. %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2536"/>
+        <location filename="../main/MainWindow.cpp" line="2718"/>
         <source>%1. %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2549"/>
+        <location filename="../main/MainWindow.cpp" line="2731"/>
         <source>Select audio file to export</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2550"/>
+        <location filename="../main/MainWindow.cpp" line="2732"/>
         <source>Which audio file do you want to export from?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2583"/>
+        <location filename="../main/MainWindow.cpp" line="2765"/>
         <source>Export the selected region only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2584"/>
+        <location filename="../main/MainWindow.cpp" line="2766"/>
         <source>Export the whole audio file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2588"/>
-        <location filename="../main/MainWindow.cpp" line="2606"/>
-        <location filename="../main/MainWindow.cpp" line="2872"/>
+        <location filename="../main/MainWindow.cpp" line="2770"/>
+        <location filename="../main/MainWindow.cpp" line="2788"/>
+        <location filename="../main/MainWindow.cpp" line="3060"/>
+        <location filename="../main/MainWindow.cpp" line="3134"/>
         <source>Select region to export</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2589"/>
+        <location filename="../main/MainWindow.cpp" line="2771"/>
         <source>Which region from the original audio file do you want to export?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2602"/>
+        <location filename="../main/MainWindow.cpp" line="2784"/>
         <source>Export the selected regions into separate files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2607"/>
+        <location filename="../main/MainWindow.cpp" line="2789"/>
         <source>Multiple regions of the original audio file are selected.
 What do you want to export?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2638"/>
+        <location filename="../main/MainWindow.cpp" line="2820"/>
         <source>Fragment file %1 already exists, aborting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2682"/>
+        <location filename="../main/MainWindow.cpp" line="2872"/>
         <source>Export multiple audio files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2684"/>
+        <location filename="../main/MainWindow.cpp" line="2874"/>
         <source>Export audio to &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2688"/>
-        <location filename="../main/MainWindow.cpp" line="2816"/>
+        <location filename="../main/MainWindow.cpp" line="2878"/>
+        <location filename="../main/MainWindow.cpp" line="3006"/>
         <source>Failed to write file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2718"/>
+        <location filename="../main/MainWindow.cpp" line="2908"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Layer file %1 could not be opened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2723"/>
-        <location filename="../main/MainWindow.cpp" line="3036"/>
-        <location filename="../main/MainWindow.cpp" line="3068"/>
-        <location filename="../main/MainWindow.cpp" line="3096"/>
-        <location filename="../main/MainWindow.cpp" line="3228"/>
+        <location filename="../main/MainWindow.cpp" line="2913"/>
+        <location filename="../main/MainWindow.cpp" line="3292"/>
+        <location filename="../main/MainWindow.cpp" line="3324"/>
+        <location filename="../main/MainWindow.cpp" line="3357"/>
+        <location filename="../main/MainWindow.cpp" line="3492"/>
         <source>&lt;b&gt;Audio required&lt;/b&gt;&lt;p&gt;Unable to load layer data from &quot;%1&quot; without an audio file.&lt;br&gt;Please load at least one audio file before importing annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2795"/>
+        <location filename="../main/MainWindow.cpp" line="2985"/>
         <source>Sorry, cannot export this layer type to RDF (supported types are: region, note, text, time instants, time values)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3135"/>
+        <location filename="../main/MainWindow.cpp" line="3396"/>
         <source>Enter template name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3140"/>
+        <location filename="../main/MainWindow.cpp" line="3401"/>
         <source>Please enter a name for the saved template:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3144"/>
+        <location filename="../main/MainWindow.cpp" line="3405"/>
         <source>Set as default template for future audio files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3164"/>
+        <location filename="../main/MainWindow.cpp" line="3425"/>
         <source>Template file exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3165"/>
+        <location filename="../main/MainWindow.cpp" line="3426"/>
         <source>&lt;b&gt;Template file exists&lt;/b&gt;&lt;p&gt;The template &quot;%1&quot; already exists.&lt;br&gt;Overwrite it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4543"/>
+        <location filename="../main/MainWindow.cpp" line="4938"/>
         <source>http://www.sonicvisualiser.org/doc/reference/%1/en/</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4648"/>
+        <location filename="../main/MainWindow.cpp" line="4950"/>
+        <source>What&apos;s New</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4962"/>
+        <source>&lt;h3&gt;What&apos;s New in %1&lt;/h3&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4971"/>
+        <source>&lt;b&gt;Note:&lt;/b&gt; A newer version of Sonic Visualiser is available.&lt;br&gt;(Version %1 is available; you are using version %2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5017"/>
+        <source>%1 : %2 configuration, %3-bit build</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5110"/>
         <source>&lt;br&gt;With Serd and Sord RDF parser and store &amp;copy; David Robillard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4649"/>
-        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4696"/>
+        <location filename="../main/MainWindow.cpp" line="5146"/>
+        <source>About %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5214"/>
         <source>Newer version available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2758"/>
+        <location filename="../main/MainWindow.cpp" line="2948"/>
         <source>Failed to open file %1 for writing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="472"/>
+        <location filename="../main/MainWindow.cpp" line="502"/>
         <source>Abandon the current %1 session and start a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="489"/>
+        <location filename="../main/MainWindow.cpp" line="519"/>
         <source>&amp;Import More Audio...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="491"/>
+        <location filename="../main/MainWindow.cpp" line="521"/>
         <source>Import an extra audio file into a new pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="498"/>
+        <location filename="../main/MainWindow.cpp" line="528"/>
         <source>Replace &amp;Main Audio...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="499"/>
+        <location filename="../main/MainWindow.cpp" line="529"/>
         <source>Replace the main audio file of the session with a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="510"/>
+        <location filename="../main/MainWindow.cpp" line="540"/>
         <source>Open &amp;Recent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="521"/>
+        <location filename="../main/MainWindow.cpp" line="551"/>
         <source>Save the current session into a %1 session file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="531"/>
+        <location filename="../main/MainWindow.cpp" line="561"/>
         <source>Save the current session into a new %1 session file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="601"/>
+        <location filename="../main/MainWindow.cpp" line="637"/>
         <source>Apply Session Template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="610"/>
+        <location filename="../main/MainWindow.cpp" line="646"/>
         <source>Export Session as Template...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="617"/>
+        <location filename="../main/MainWindow.cpp" line="653"/>
         <source>Manage Exported Templates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="632"/>
+        <location filename="../main/MainWindow.cpp" line="668"/>
         <source>Exit %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1735"/>
+        <location filename="../main/MainWindow.cpp" line="1900"/>
         <source>Open the %1 reference manual</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1742"/>
+        <location filename="../main/MainWindow.cpp" line="1907"/>
         <source>Open a window showing the keystrokes you can use in %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1747"/>
+        <location filename="../main/MainWindow.cpp" line="1912"/>
         <source>%1 on the &amp;Web</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1748"/>
+        <location filename="../main/MainWindow.cpp" line="1913"/>
         <source>Open the %1 website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1752"/>
+        <location filename="../main/MainWindow.cpp" line="1922"/>
         <source>&amp;About %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1753"/>
+        <location filename="../main/MainWindow.cpp" line="1923"/>
         <source>Show information about %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2601"/>
+        <location filename="../main/MainWindow.cpp" line="2783"/>
         <source>Export the selected regions into a single file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2603"/>
+        <location filename="../main/MainWindow.cpp" line="2785"/>
         <source>Export the whole file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2783"/>
+        <location filename="../main/MainWindow.cpp" line="2973"/>
         <source>Can&apos;t export non-note layers to MIDI</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2819"/>
+        <location filename="../main/MainWindow.cpp" line="3009"/>
         <source>Export layer to &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2854"/>
+        <location filename="../main/MainWindow.cpp" line="3042"/>
         <source>Export the whole pane (%1x%2 pixels)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2856"/>
+        <location filename="../main/MainWindow.cpp" line="3044"/>
         <source>Export the visible area only (%1x%2 pixels)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2859"/>
+        <location filename="../main/MainWindow.cpp" line="3047"/>
         <source>Export the selection extent (%1x%2 pixels)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2862"/>
+        <location filename="../main/MainWindow.cpp" line="3050"/>
+        <location filename="../main/MainWindow.cpp" line="3126"/>
         <source>Export the selection extent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2873"/>
+        <location filename="../main/MainWindow.cpp" line="3061"/>
         <source>Which region of the current pane do you want to export as an image?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2881"/>
+        <location filename="../main/MainWindow.cpp" line="3069"/>
         <source>Note: the whole pane is too wide to be exported as a single image.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2906"/>
+        <location filename="../main/MainWindow.cpp" line="3094"/>
         <source>Failed to save image file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2907"/>
+        <location filename="../main/MainWindow.cpp" line="3095"/>
         <source>Failed to save image file %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3032"/>
+        <location filename="../main/MainWindow.cpp" line="3288"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3049"/>
+        <location filename="../main/MainWindow.cpp" line="3305"/>
         <source>Open Location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3050"/>
+        <location filename="../main/MainWindow.cpp" line="3306"/>
         <source>Please enter the URL of the location to open:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3063"/>
-        <location filename="../main/MainWindow.cpp" line="3067"/>
-        <location filename="../main/MainWindow.cpp" line="3091"/>
-        <location filename="../main/MainWindow.cpp" line="3095"/>
+        <location filename="../main/MainWindow.cpp" line="3319"/>
+        <location filename="../main/MainWindow.cpp" line="3323"/>
+        <location filename="../main/MainWindow.cpp" line="3352"/>
+        <location filename="../main/MainWindow.cpp" line="3356"/>
         <source>Failed to open location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3064"/>
+        <location filename="../main/MainWindow.cpp" line="3320"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3092"/>
+        <location filename="../main/MainWindow.cpp" line="3353"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;File or URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3222"/>
-        <location filename="../main/MainWindow.cpp" line="3227"/>
+        <location filename="../main/MainWindow.cpp" line="3486"/>
+        <location filename="../main/MainWindow.cpp" line="3491"/>
         <source>Failed to open dropped URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3223"/>
+        <location filename="../main/MainWindow.cpp" line="3487"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;Dropped URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3338"/>
+        <location filename="../main/MainWindow.cpp" line="3601"/>
         <source>Export image to &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3359"/>
+        <location filename="../main/MainWindow.cpp" line="3622"/>
         <source>Session modified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3360"/>
+        <location filename="../main/MainWindow.cpp" line="3623"/>
         <source>&lt;b&gt;Session modified&lt;/b&gt;&lt;p&gt;The current session has been modified.&lt;br&gt;Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3393"/>
+        <location filename="../main/MainWindow.cpp" line="3656"/>
         <source>Close the current session and create a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3394"/>
+        <location filename="../main/MainWindow.cpp" line="3657"/>
         <source>Add this data to the current session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3398"/>
+        <location filename="../main/MainWindow.cpp" line="3661"/>
         <source>Select target for import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3399"/>
+        <location filename="../main/MainWindow.cpp" line="3662"/>
         <source>&lt;b&gt;Select a target for import&lt;/b&gt;&lt;p&gt;This RDF document refers to one or more audio files.&lt;br&gt;You already have an audio waveform loaded.&lt;br&gt;What would you like to do with the new data?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3421"/>
-        <location filename="../main/MainWindow.cpp" line="3444"/>
+        <location filename="../main/MainWindow.cpp" line="3684"/>
+        <location filename="../main/MainWindow.cpp" line="3707"/>
         <source>Failed to save file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3422"/>
-        <location filename="../main/MainWindow.cpp" line="3445"/>
+        <location filename="../main/MainWindow.cpp" line="3685"/>
+        <location filename="../main/MainWindow.cpp" line="3708"/>
         <source>&lt;b&gt;Save failed&lt;/b&gt;&lt;p&gt;Session file &quot;%1&quot; could not be saved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3454"/>
+        <location filename="../main/MainWindow.cpp" line="3717"/>
         <source>Save session as &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3788"/>
+        <location filename="../main/MainWindow.cpp" line="4077"/>
         <source>Multiplex all of the above</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3837"/>
+        <location filename="../main/MainWindow.cpp" line="4142"/>
         <source>Rename Layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3838"/>
+        <location filename="../main/MainWindow.cpp" line="4143"/>
         <source>New name for this layer:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3933"/>
+        <location filename="../main/MainWindow.cpp" line="4238"/>
         <source>Playback speed: Normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4062"/>
+        <location filename="../main/MainWindow.cpp" line="4372"/>
         <source>Selection: %1 to %2 (duration %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4065"/>
+        <location filename="../main/MainWindow.cpp" line="4375"/>
         <source>Visible: %1 to %2 (duration %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4116"/>
+        <location filename="../main/MainWindow.cpp" line="4425"/>
         <source>Sample rate mismatch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4117"/>
+        <location filename="../main/MainWindow.cpp" line="4426"/>
         <source>&lt;b&gt;Wrong sample rate&lt;/b&gt;&lt;p&gt;The sample rate of this audio file (%1 Hz) does not match
 the current playback rate (%2 Hz).&lt;p&gt;The file will play at the wrong speed and pitch.&lt;p&gt;Change the &lt;i&gt;Resample mismatching files on import&lt;/i&gt; option under &lt;i&gt;File&lt;/i&gt; -&gt; &lt;i&gt;Preferences&lt;/i&gt; if you want to alter this behaviour.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4128"/>
-        <location filename="../main/MainWindow.cpp" line="4138"/>
+        <location filename="../main/MainWindow.cpp" line="4437"/>
+        <location filename="../main/MainWindow.cpp" line="4447"/>
         <source>Audio processing overload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4129"/>
+        <location filename="../main/MainWindow.cpp" line="4438"/>
         <source>&lt;b&gt;Overloaded&lt;/b&gt;&lt;p&gt;Audio effects plugin auditioning has been disabled due to a processing overload.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4139"/>
+        <location filename="../main/MainWindow.cpp" line="4448"/>
         <source>&lt;b&gt;Overloaded&lt;/b&gt;&lt;p&gt;Audio playback speed processing has been reduced to a single channel, due to a processing overload.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4146"/>
+        <location filename="../main/MainWindow.cpp" line="4478"/>
         <source>Problems loading plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4224"/>
+        <location filename="../main/MainWindow.cpp" line="4559"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4352"/>
+        <location filename="../main/MainWindow.cpp" line="4700"/>
         <source>Reset Counters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4376"/>
-        <location filename="../main/MainWindow.cpp" line="4383"/>
+        <location filename="../main/MainWindow.cpp" line="4768"/>
+        <location filename="../main/MainWindow.cpp" line="4775"/>
         <source>Failed to generate layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4396"/>
-        <location filename="../main/MainWindow.cpp" line="4431"/>
+        <location filename="../main/MainWindow.cpp" line="4788"/>
+        <location filename="../main/MainWindow.cpp" line="4823"/>
         <source>Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4409"/>
-        <location filename="../main/MainWindow.cpp" line="4416"/>
+        <location filename="../main/MainWindow.cpp" line="4801"/>
+        <location filename="../main/MainWindow.cpp" line="4808"/>
         <source>Failed to regenerate layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4410"/>
+        <location filename="../main/MainWindow.cpp" line="4802"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to regenerate derived layer &quot;%1&quot; using new data model as input.&lt;p&gt;The layer transform &quot;%2&quot; failed:&lt;p&gt;%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4417"/>
+        <location filename="../main/MainWindow.cpp" line="4809"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to regenerate derived layer &quot;%1&quot; using new data model as input.&lt;p&gt;The layer transform &quot;%2&quot; failed.&lt;p&gt;No error information is available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4431"/>
+        <location filename="../main/MainWindow.cpp" line="4823"/>
         <source>&lt;b&gt;Warning when regenerating layer&lt;/b&gt;&lt;p&gt;When regenerating the derived layer &quot;%1&quot; using new data model as input:&lt;p&gt;%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4441"/>
+        <location filename="../main/MainWindow.cpp" line="4831"/>
         <source>Failed to calculate alignment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4442"/>
-        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment using transform &quot;%1&quot;:&lt;p&gt;%2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4522"/>
-        <source>Adjust the master playback level</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4524"/>
+        <location filename="../main/MainWindow.cpp" line="4919"/>
         <source>Adjust the master playback speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4537"/>
+        <location filename="../main/MainWindow.cpp" line="4932"/>
         <source>http://www.sonicvisualiser.org/</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4557"/>
+        <location filename="../main/MainWindow.cpp" line="5007"/>
         <source>Release %1 : Revision %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4559"/>
+        <location filename="../main/MainWindow.cpp" line="5009"/>
         <source>Release %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4563"/>
+        <location filename="../main/MainWindow.cpp" line="5013"/>
         <source>Unreleased : Revision %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4569"/>
+        <location filename="../main/MainWindow.cpp" line="5028"/>
         <source>&lt;h3&gt;About Sonic Visualiser&lt;/h3&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4570"/>
+        <location filename="../main/MainWindow.cpp" line="5029"/>
         <source>&lt;p&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;br&gt;&lt;a href=&quot;http://www.sonicvisualiser.org/&quot;&gt;http://www.sonicvisualiser.org/&lt;/a&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4571"/>
-        <source>&lt;p&gt;&lt;small&gt;%1 : %2 configuration&lt;/small&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4573"/>
+        <location filename="../main/MainWindow.cpp" line="5019"/>
         <source>Debug</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4573"/>
+        <location filename="../main/MainWindow.cpp" line="5019"/>
         <source>Release</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4577"/>
-        <source>With Qt v%1 &amp;copy; Nokia Corporation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4581"/>
+        <location filename="../main/MainWindow.cpp" line="5044"/>
         <source>&lt;br&gt;With JACK audio output library v%1 &amp;copy; Paul Davis and Jack O&apos;Quin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4583"/>
+        <location filename="../main/MainWindow.cpp" line="5046"/>
         <source>&lt;br&gt;With JACK audio output library &amp;copy; Paul Davis and Jack O&apos;Quin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4587"/>
+        <location filename="../main/MainWindow.cpp" line="5050"/>
         <source>&lt;br&gt;With PortAudio audio output library &amp;copy; Ross Bencina and Phil Burk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4591"/>
+        <location filename="../main/MainWindow.cpp" line="5054"/>
         <source>&lt;br&gt;With PulseAudio audio output library v%1 &amp;copy; Lennart Poettering and Pierre Ossman</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4593"/>
+        <location filename="../main/MainWindow.cpp" line="5056"/>
         <source>&lt;br&gt;With PulseAudio audio output library &amp;copy; Lennart Poettering and Pierre Ossman</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4598"/>
+        <location filename="../main/MainWindow.cpp" line="5061"/>
         <source>&lt;br&gt;With Ogg file decoder (oggz v%1, fishsound v%2) &amp;copy; CSIRO Australia</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4600"/>
+        <location filename="../main/MainWindow.cpp" line="5063"/>
         <source>&lt;br&gt;With Ogg file decoder &amp;copy; CSIRO Australia</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4605"/>
+        <location filename="../main/MainWindow.cpp" line="5068"/>
         <source>&lt;br&gt;With MAD mp3 decoder v%1 &amp;copy; Underbit Technologies Inc</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4607"/>
+        <location filename="../main/MainWindow.cpp" line="5070"/>
         <source>&lt;br&gt;With MAD mp3 decoder &amp;copy; Underbit Technologies Inc</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4612"/>
+        <location filename="../main/MainWindow.cpp" line="5075"/>
         <source>&lt;br&gt;With libsamplerate v%1 &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4614"/>
+        <location filename="../main/MainWindow.cpp" line="5077"/>
         <source>&lt;br&gt;With libsamplerate &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4619"/>
+        <location filename="../main/MainWindow.cpp" line="5082"/>
         <source>&lt;br&gt;With libsndfile v%1 &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4621"/>
+        <location filename="../main/MainWindow.cpp" line="5084"/>
         <source>&lt;br&gt;With libsndfile &amp;copy; Erik de Castro Lopo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4626"/>
+        <location filename="../main/MainWindow.cpp" line="5089"/>
         <source>&lt;br&gt;With FFTW3 v%1 &amp;copy; Matteo Frigo and MIT</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4628"/>
+        <location filename="../main/MainWindow.cpp" line="5091"/>
         <source>&lt;br&gt;With FFTW3 &amp;copy; Matteo Frigo and MIT</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4633"/>
-        <source>&lt;br&gt;With Rubber Band v%1 &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4635"/>
-        <source>&lt;br&gt;With Rubber Band &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4639"/>
-        <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4641"/>
+        <location filename="../main/MainWindow.cpp" line="5103"/>
         <source>&lt;br&gt;With LADSPA plugin support (API v%1) &amp;copy; Richard Furse, Paul Davis, Stefan Westerfeld</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4642"/>
+        <location filename="../main/MainWindow.cpp" line="5104"/>
         <source>&lt;br&gt;With DSSI plugin support (API v%1) &amp;copy; Chris Cannam, Steve Harris, Sean Bolton</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4644"/>
+        <location filename="../main/MainWindow.cpp" line="5106"/>
         <source>&lt;br&gt;With Redland RDF datastore v%1 &amp;copy; Dave Beckett and the University of Bristol</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4646"/>
+        <location filename="../main/MainWindow.cpp" line="5108"/>
         <source>&lt;br&gt;With Redland RDF datastore &amp;copy; Dave Beckett and the University of Bristol</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4651"/>
+        <location filename="../main/MainWindow.cpp" line="5113"/>
         <source>&lt;br&gt;With RtMidi &amp;copy; Gary P. Scavone</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4655"/>
+        <location filename="../main/MainWindow.cpp" line="5117"/>
         <source>&lt;br&gt;With liblo Lite OSC library v%1 &amp;copy; Steve Harris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4657"/>
+        <location filename="../main/MainWindow.cpp" line="5119"/>
         <source>&lt;br&gt;With liblo Lite OSC library &amp;copy; Steve Harris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4661"/>
+        <location filename="../main/MainWindow.cpp" line="5033"/>
         <source>&lt;/small&gt;&lt;p&gt;&lt;small&gt;The OSC URL for this instance is: &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4668"/>
-        <source>With </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4668"/>
-        <source>Using </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4680"/>
-        <source>About Sonic Visualiser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/OSCHandler.cpp" line="319"/>
+        <location filename="../main/OSCHandler.cpp" line="337"/>
         <source>Add %1 Pane</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4492,215 +4682,301 @@
 <context>
     <name>MainWindowBase</name>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="645"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="698"/>
         <source>%1 (modified)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="660"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="713"/>
         <source> (modified)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="858"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="939"/>
         <source>Cut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="929"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1010"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1035"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1058"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1148"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1167"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1186"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1116"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1139"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1229"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1248"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1267"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1089"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1170"/>
         <source>Add Point at %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1132"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1213"/>
         <source>Add Item at %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1227"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1359"/>
         <source>Opening file or URL...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1366"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1519"/>
         <source>Select target for import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1468"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1892"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2022"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2763"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1621"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2095"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2242"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3131"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1475"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2770"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1628"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3138"/>
         <source>%1: %2 [%3]</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1490"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1531"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1645"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1689"/>
         <source>Import &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1587"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1745"/>
         <source>Opening playlist...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2041"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2065"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2261"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2287"/>
         <source>Importing from RDF...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1792"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1995"/>
         <source>Opening session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1360"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1440"/>
+        <source>Not enough disc space</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1441"/>
+        <source>&lt;b&gt;Not enough disc space&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough spare disc space to accommodate any necessary temporary files.&lt;/p&gt;&lt;p&gt;Please clear some space and try again.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1448"/>
+        <source>Not enough memory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1449"/>
+        <source>&lt;b&gt;Not enough memory&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough memory to accommodate any necessary temporary data.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1513"/>
         <source>Close the current session and start a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1361"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1514"/>
         <source>Replace the main audio file in this session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1362"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1515"/>
         <source>Add the audio file to this session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1367"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1520"/>
         <source>&lt;b&gt;Select a target for import&lt;/b&gt;&lt;p&gt;You already have an audio file loaded.&lt;br&gt;What would you like to do with the new audio file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1449"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1602"/>
         <source>Import audio file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1673"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1831"/>
         <source>Import layer XML file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1707"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1865"/>
         <source>Import MIDI file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1877"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1976"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2080"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2194"/>
         <source>SV XML file read error:
 %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1890"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2093"/>
         <source>Import session file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1988"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2110"/>
+        <source>Incomplete session loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2111"/>
+        <source>Some of the audio content referred to by the original session file could not be loaded.
+If you save this session, it will be saved without any reference to that audio, and information may be lost.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2206"/>
         <source>Open session template &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2056"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2069"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2278"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2291"/>
         <source>Failed to import RDF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2057"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2279"/>
         <source>&lt;b&gt;Failed to import RDF&lt;/b&gt;&lt;p&gt;Importing data from RDF document at &quot;%1&quot; failed: %2&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2070"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2292"/>
         <source>&lt;b&gt;Failed to import RDF&lt;/b&gt;&lt;p&gt;No suitable data models found for import from RDF document at &quot;%1&quot;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2074"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2296"/>
         <source>Import RDF document &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2217"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2489"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2491"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open audio device: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2494"/>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2496"/>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2503"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;).&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2505"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;): %2.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2508"/>
+        <source>&lt;p&gt;Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2510"/>
+        <source>&lt;p&gt;Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2515"/>
         <source>Couldn&apos;t open audio device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2218"/>
-        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device for playback.&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3392"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3763"/>
         <source>Recording: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2308"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2321"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2359"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2630"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2643"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2681"/>
         <source>Failed to write file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2309"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2322"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2360"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2631"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2644"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2682"/>
         <source>&lt;b&gt;Save failed&lt;/b&gt;&lt;p&gt;Failed to write to file &quot;%1&quot;: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2783"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3049"/>
+        <source>No record device available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3050"/>
+        <source>&lt;b&gt;No record device available&lt;/b&gt;&lt;p&gt;Failed to find or open an audio device for recording. Only playback will be available.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3078"/>
+        <source>Recording failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3079"/>
+        <source>&lt;b&gt;Recording failed&lt;/b&gt;&lt;p&gt;Failed to switch to record mode (some internal problem?)&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3151"/>
         <source>Import Recorded Audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3075"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3446"/>
         <source>Add Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3121"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3492"/>
         <source>Remove Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3144"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3561"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3515"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3932"/>
         <source>Delete Pane</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3380"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3751"/>
         <source>Playing: %1 of %2 (%3 remaining)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4814,7 +5090,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/ModelTransformerFactory.cpp" line="239"/>
+        <location filename="../svcore/transform/ModelTransformerFactory.cpp" line="238"/>
         <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4822,17 +5098,32 @@
 <context>
     <name>NetworkPermissionTester</name>
     <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="44"/>
+        <location filename="../main/NetworkPermissionTester.cpp" line="48"/>
         <source>Welcome to Sonic Visualiser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="53"/>
-        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary, University of London, Sonic Visualiser is provided free as open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like to make networking connections and open a network port.&lt;/p&gt;&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control, where configured; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;No personal information will be sent, no tracking is carried out, and all requests happen in the background without interrupting your work.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful. But if you do not wish to do so, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="69"/>
+        <location filename="../main/NetworkPermissionTester.cpp" line="55"/>
+        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary University of London, Sonic Visualiser is open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like permission to use the network.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="66"/>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="74"/>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="83"/>
+        <source>&lt;p&gt;&lt;b&gt;No personal information will be sent, no tracking is carried out, and no individual information will be shared with anyone else.&lt;/b&gt; We will however make aggregate counts of distinct requests for usage reporting.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful to you and supports the public funding of this work. But if you do not wish to allow it, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="92"/>
         <source>Allow this</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4840,75 +5131,75 @@
 <context>
     <name>NoteLayer</name>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="56"/>
         <location filename="../svgui/layer/NoteLayer.cpp" line="57"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="897"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="58"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="898"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="94"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="95"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="95"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="96"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="111"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="160"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="161"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="161"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="162"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="162"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="163"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="163"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="164"/>
         <source>MIDI Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="473"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="474"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="475"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="498"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="476"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="499"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="512"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="513"/>
         <source>%1 (%2, %3 Hz)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="519"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="520"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="525"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="526"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="532"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="533"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -4916,7 +5207,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="537"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="538"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -4924,68 +5215,68 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="902"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="903"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="978"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="979"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1030"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1031"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1051"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1099"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1052"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1100"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1053"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1054"/>
         <source>Relocate Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1056"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1057"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1115"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1116"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1140"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1141"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1179"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1180"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1225"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1226"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1226"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1227"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1240"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1241"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1311"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1312"/>
         <source>Record Note</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5041,7 +5332,7 @@
 <context>
     <name>OggVorbisFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/OggVorbisFileReader.cpp" line="77"/>
+        <location filename="../svcore/data/fileio/OggVorbisFileReader.cpp" line="110"/>
         <source>Decoding %1...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5054,7 +5345,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Overview.cpp" line="362"/>
+        <location filename="../svgui/view/Overview.cpp" line="359"/>
         <source>Click and drag to navigate; double-click to jump</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5062,300 +5353,300 @@
 <context>
     <name>Pane</name>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="141"/>
+        <location filename="../svgui/view/Pane.cpp" line="143"/>
         <source>Horizontal Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="167"/>
+        <location filename="../svgui/view/Pane.cpp" line="169"/>
         <source>Vertical Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="188"/>
+        <location filename="../svgui/view/Pane.cpp" line="190"/>
         <source>Reset zoom to default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="675"/>
+        <location filename="../svgui/view/Pane.cpp" line="699"/>
         <source>Some lengthy prefix:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="836"/>
+        <location filename="../svgui/view/Pane.cpp" line="864"/>
         <source>Reference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="838"/>
-        <location filename="../svgui/view/Pane.cpp" line="842"/>
+        <location filename="../svgui/view/Pane.cpp" line="866"/>
+        <location filename="../svgui/view/Pane.cpp" line="870"/>
         <source>Unaligned</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="844"/>
+        <location filename="../svgui/view/Pane.cpp" line="872"/>
         <source>Aligning: %1%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="846"/>
+        <location filename="../svgui/view/Pane.cpp" line="874"/>
         <source>Aligned</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="888"/>
+        <location filename="../svgui/view/Pane.cpp" line="916"/>
         <source>%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="998"/>
-        <location filename="../svgui/view/Pane.cpp" line="1014"/>
+        <location filename="../svgui/view/Pane.cpp" line="1026"/>
+        <location filename="../svgui/view/Pane.cpp" line="1042"/>
         <source>+%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1064"/>
+        <location filename="../svgui/view/Pane.cpp" line="1091"/>
         <source>(R)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1067"/>
+        <location filename="../svgui/view/Pane.cpp" line="1089"/>
         <source>(X)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1071"/>
+        <location filename="../svgui/view/Pane.cpp" line="1095"/>
         <source>%1 / %2Hz%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1255"/>
-        <location filename="../svgui/view/Pane.cpp" line="1261"/>
+        <location filename="../svgui/view/Pane.cpp" line="1281"/>
+        <location filename="../svgui/view/Pane.cpp" line="1287"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1256"/>
+        <location filename="../svgui/view/Pane.cpp" line="1282"/>
         <source>Zoom In</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1256"/>
+        <location filename="../svgui/view/Pane.cpp" line="1282"/>
         <source>Wheel Up</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1257"/>
+        <location filename="../svgui/view/Pane.cpp" line="1283"/>
         <source>Zoom Out</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1257"/>
+        <location filename="../svgui/view/Pane.cpp" line="1283"/>
         <source>Wheel Down</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1259"/>
+        <location filename="../svgui/view/Pane.cpp" line="1285"/>
         <source>General Pane Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1261"/>
+        <location filename="../svgui/view/Pane.cpp" line="1287"/>
         <source>Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1262"/>
+        <location filename="../svgui/view/Pane.cpp" line="1288"/>
         <source>Zoom in or out in time axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1263"/>
+        <location filename="../svgui/view/Pane.cpp" line="1289"/>
         <source>Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1263"/>
+        <location filename="../svgui/view/Pane.cpp" line="1289"/>
         <source>Ctrl+Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1264"/>
+        <location filename="../svgui/view/Pane.cpp" line="1290"/>
         <source>Scroll rapidly left or right in time axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1265"/>
+        <location filename="../svgui/view/Pane.cpp" line="1291"/>
         <source>Zoom Vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1265"/>
+        <location filename="../svgui/view/Pane.cpp" line="1291"/>
         <source>Shift+Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1266"/>
+        <location filename="../svgui/view/Pane.cpp" line="1292"/>
         <source>Zoom in or out in the vertical axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1267"/>
+        <location filename="../svgui/view/Pane.cpp" line="1293"/>
         <source>Scroll Vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1267"/>
+        <location filename="../svgui/view/Pane.cpp" line="1293"/>
         <source>Alt+Wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1268"/>
+        <location filename="../svgui/view/Pane.cpp" line="1294"/>
         <source>Scroll up or down in the vertical axis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1269"/>
+        <location filename="../svgui/view/Pane.cpp" line="1295"/>
         <source>Navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1269"/>
+        <location filename="../svgui/view/Pane.cpp" line="1295"/>
         <source>Middle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1270"/>
+        <location filename="../svgui/view/Pane.cpp" line="1296"/>
         <source>Click middle button and drag to navigate with any tool</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1271"/>
+        <location filename="../svgui/view/Pane.cpp" line="1297"/>
         <source>Relocate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1271"/>
+        <location filename="../svgui/view/Pane.cpp" line="1297"/>
         <source>Double-Click Middle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1272"/>
+        <location filename="../svgui/view/Pane.cpp" line="1298"/>
         <source>Double-click middle button to relocate with any tool</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1273"/>
+        <location filename="../svgui/view/Pane.cpp" line="1299"/>
         <source>Menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1273"/>
+        <location filename="../svgui/view/Pane.cpp" line="1299"/>
         <source>Right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1274"/>
+        <location filename="../svgui/view/Pane.cpp" line="1300"/>
         <source>Show pane context menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2508"/>
+        <location filename="../svgui/view/Pane.cpp" line="2536"/>
         <source>Enter new range</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2509"/>
+        <location filename="../svgui/view/Pane.cpp" line="2537"/>
         <source>New vertical display range, from %1 to %2 %4:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2631"/>
+        <location filename="../svgui/view/Pane.cpp" line="2659"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2638"/>
+        <location filename="../svgui/view/Pane.cpp" line="2666"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2802"/>
+        <location filename="../svgui/view/Pane.cpp" line="2830"/>
         <source>Click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2813"/>
+        <location filename="../svgui/view/Pane.cpp" line="2841"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Cmd for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2815"/>
+        <location filename="../svgui/view/Pane.cpp" line="2843"/>
         <source>Click and drag to select a range; hold Cmd for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2819"/>
+        <location filename="../svgui/view/Pane.cpp" line="2847"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Ctrl for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2821"/>
+        <location filename="../svgui/view/Pane.cpp" line="2849"/>
         <source>Click and drag to select a range; hold Ctrl for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2830"/>
+        <location filename="../svgui/view/Pane.cpp" line="2858"/>
         <source>Click and drag to move the selection boundary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2835"/>
+        <location filename="../svgui/view/Pane.cpp" line="2863"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; middle-click to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2837"/>
+        <location filename="../svgui/view/Pane.cpp" line="2865"/>
         <source>Click and drag to select a range; middle-click and drag to navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2845"/>
+        <location filename="../svgui/view/Pane.cpp" line="2873"/>
         <source>Click to add a new item in the active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2852"/>
+        <location filename="../svgui/view/Pane.cpp" line="2880"/>
         <source>Click to erase an item from the active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2859"/>
+        <location filename="../svgui/view/Pane.cpp" line="2887"/>
         <source>Click and drag an item in the active layer to move it; hold Shift to override initial resistance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2864"/>
+        <location filename="../svgui/view/Pane.cpp" line="2892"/>
         <source>Click and drag to move all items in the selected range</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2880"/>
+        <location filename="../svgui/view/Pane.cpp" line="2908"/>
         <source>Click and drag to adjust the visible range of the vertical scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2882"/>
+        <location filename="../svgui/view/Pane.cpp" line="2910"/>
         <source>Click and drag to adjust the vertical zoom level</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2884"/>
+        <location filename="../svgui/view/Pane.cpp" line="2912"/>
         <source>Click and drag to adjust the horizontal zoom level</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2886"/>
+        <location filename="../svgui/view/Pane.cpp" line="2914"/>
         <source>Reset horizontal and vertical zoom levels to their defaults</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5404,382 +5695,534 @@
 <context>
     <name>PluginParameterDialog</name>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="56"/>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="193"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="57"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="181"/>
         <source>Plugin Parameters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="104"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="101"/>
         <source>Name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="127"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="121"/>
         <source>Version:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="140"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="128"/>
         <source>Maker:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="134"/>
+        <source>Copyright:  </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="146"/>
-        <source>Copyright:  </source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="158"/>
         <source>Output:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="177"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="165"/>
         <source>Input Material</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="186"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="174"/>
         <source>Restrict to selection extents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="219"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="207"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="225"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="213"/>
         <source>Processing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="235"/>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="606"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="223"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="592"/>
         <source>Advanced &gt;&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="324"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="312"/>
         <source>Channel mismatch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>This plugin requires at least %1 input channels, but only %2 %3 available.  The plugin probably will not work correctly.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>are</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>is</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="342"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="330"/>
         <source>This plugin accepts no more than %1 input channels,
 but %2 are available.  Only the first %3 will be used.
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="349"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="337"/>
         <source>This plugin only has a single channel input,
 but the source has %1 channels.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="352"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="340"/>
         <source>Use mean of source channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="354"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="342"/>
         <source>Use channel %1 only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="406"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="394"/>
         <source>Window size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="408"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="396"/>
         <source>Audio frames per block:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="433"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="421"/>
         <source>Window increment:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="457"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="445"/>
         <source>Window shape:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="601"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="587"/>
         <source>Advanced &lt;&lt;</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginPathConfigurator</name>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="41"/>
+        <source>Move the selected location later in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="47"/>
+        <source>Move the selected location earlier in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="53"/>
+        <source>Add a new location to the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="59"/>
+        <source>Remove the selected location from the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="64"/>
+        <source>Reset to Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="65"/>
+        <source>Reset the list for this plugin type to its default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="72"/>
+        <source>Review plugins...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="79"/>
+        <source>Plugin locations for plugin type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="118"/>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="120"/>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="122"/>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="127"/>
+        <source>Vamp (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="129"/>
+        <source>LADSPA (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="131"/>
+        <source>DSSI (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="188"/>
+        <source>(Variable is currently unset)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="192"/>
+        <source>(Current value begins: &quot;%1 ...&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="195"/>
+        <source>(Currently set to: &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="200"/>
+        <source>Allow the %1 environment variable to take priority over this
+%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="327"/>
+        <source>Choose directory to add</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>PluginReviewDialog</name>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="31"/>
+        <source>Plugins Loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="69"/>
+        <source>Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="69"/>
+        <source>Library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Found in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="78"/>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="95"/>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="112"/>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>Preferences</name>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="118"/>
+        <location filename="../svcore/base/Preferences.cpp" line="121"/>
         <source>Spectrogram y-axis interpolation:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="121"/>
+        <location filename="../svcore/base/Preferences.cpp" line="124"/>
         <source>Spectrogram x-axis interpolation:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="124"/>
+        <location filename="../svcore/base/Preferences.cpp" line="127"/>
         <source>Frequency of concert A</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="127"/>
+        <location filename="../svcore/base/Preferences.cpp" line="130"/>
         <source>Property box layout</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="130"/>
+        <location filename="../svcore/base/Preferences.cpp" line="133"/>
         <source>Spectral analysis window shape</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="133"/>
+        <location filename="../svcore/base/Preferences.cpp" line="136"/>
         <source>Playback resampler type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="136"/>
+        <location filename="../svcore/base/Preferences.cpp" line="139"/>
         <source>Normalise audio signal when reading from audio file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="139"/>
+        <location filename="../svcore/base/Preferences.cpp" line="142"/>
         <source>Omit temporaries from Recent Files menu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="142"/>
+        <location filename="../svcore/base/Preferences.cpp" line="145"/>
         <source>Resample mismatching files on import</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="145"/>
+        <location filename="../svcore/base/Preferences.cpp" line="148"/>
+        <source>Load mp3 files in gapless mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="151"/>
         <source>Single fixed sample rate to resample all files to</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="148"/>
+        <location filename="../svcore/base/Preferences.cpp" line="154"/>
         <source>Location for cache file directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="151"/>
+        <location filename="../svcore/base/Preferences.cpp" line="157"/>
         <source>Background colour preference</source>
         <translation type="unfinished">Background color preference</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="154"/>
+        <location filename="../svcore/base/Preferences.cpp" line="160"/>
         <source>Time display precision</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="157"/>
+        <location filename="../svcore/base/Preferences.cpp" line="163"/>
         <source>Use hours:minutes:seconds format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="160"/>
+        <location filename="../svcore/base/Preferences.cpp" line="166"/>
         <source>Label middle C as</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="163"/>
+        <location filename="../svcore/base/Preferences.cpp" line="169"/>
         <source>Font size for text overlays</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="166"/>
+        <location filename="../svcore/base/Preferences.cpp" line="172"/>
         <source>Show splash screen on startup</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="323"/>
+        <location filename="../svcore/base/Preferences.cpp" line="329"/>
         <source>Show boxes for all panes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="324"/>
+        <location filename="../svcore/base/Preferences.cpp" line="330"/>
         <source>Show box for current pane only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="328"/>
+        <location filename="../svcore/base/Preferences.cpp" line="334"/>
         <source>Rectangular</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="329"/>
+        <location filename="../svcore/base/Preferences.cpp" line="335"/>
         <source>Triangular</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="330"/>
+        <location filename="../svcore/base/Preferences.cpp" line="336"/>
         <source>Hamming</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="331"/>
+        <location filename="../svcore/base/Preferences.cpp" line="337"/>
         <source>Hann</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="332"/>
+        <location filename="../svcore/base/Preferences.cpp" line="338"/>
         <source>Blackman</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="333"/>
+        <location filename="../svcore/base/Preferences.cpp" line="339"/>
         <source>Gaussian</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="334"/>
+        <location filename="../svcore/base/Preferences.cpp" line="340"/>
         <source>Parzen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="335"/>
+        <location filename="../svcore/base/Preferences.cpp" line="341"/>
         <source>Nuttall</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="336"/>
+        <location filename="../svcore/base/Preferences.cpp" line="342"/>
         <source>Blackman-Harris</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="341"/>
+        <location filename="../svcore/base/Preferences.cpp" line="347"/>
         <source>Fastest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="342"/>
+        <location filename="../svcore/base/Preferences.cpp" line="348"/>
         <source>Standard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="343"/>
+        <location filename="../svcore/base/Preferences.cpp" line="349"/>
         <source>Highest quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="348"/>
+        <location filename="../svcore/base/Preferences.cpp" line="354"/>
+        <location filename="../svcore/base/Preferences.cpp" line="362"/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="355"/>
+        <location filename="../svcore/base/Preferences.cpp" line="363"/>
+        <source>Linear interpolation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/base/Preferences.cpp" line="356"/>
-        <source>None</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="349"/>
+        <source>4 x Oversampling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/base/Preferences.cpp" line="357"/>
-        <source>Linear interpolation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="350"/>
-        <source>4 x Oversampling</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="351"/>
         <source>4 x Oversampling with interpolation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="362"/>
+        <location filename="../svcore/base/Preferences.cpp" line="368"/>
         <source>Follow desktop theme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="363"/>
+        <location filename="../svcore/base/Preferences.cpp" line="369"/>
         <source>Dark background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="364"/>
+        <location filename="../svcore/base/Preferences.cpp" line="370"/>
         <source>Light background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="369"/>
+        <location filename="../svcore/base/Preferences.cpp" line="375"/>
         <source>Standard (to millisecond)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="370"/>
+        <location filename="../svcore/base/Preferences.cpp" line="376"/>
         <source>High resolution (to microsecond)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="371"/>
+        <location filename="../svcore/base/Preferences.cpp" line="377"/>
         <source>24 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="372"/>
+        <location filename="../svcore/base/Preferences.cpp" line="378"/>
         <source>25 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="373"/>
+        <location filename="../svcore/base/Preferences.cpp" line="379"/>
         <source>30 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="374"/>
+        <location filename="../svcore/base/Preferences.cpp" line="380"/>
         <source>50 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="375"/>
+        <location filename="../svcore/base/Preferences.cpp" line="381"/>
         <source>60 FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="380"/>
+        <location filename="../svcore/base/Preferences.cpp" line="386"/>
         <source>C0 - middle of octave scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="381"/>
+        <location filename="../svcore/base/Preferences.cpp" line="387"/>
         <source>C3 - common MIDI sequencer convention</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="382"/>
+        <location filename="../svcore/base/Preferences.cpp" line="388"/>
         <source>C4 - ASA American standard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="383"/>
+        <location filename="../svcore/base/Preferences.cpp" line="389"/>
         <source>C5 - used in Cakewalk and others</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="393"/>
+        <location filename="../svcore/base/Preferences.cpp" line="399"/>
         <source>Preferences</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5787,155 +6230,212 @@
 <context>
     <name>PreferencesDialog</name>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="54"/>
+        <location filename="../main/PreferencesDialog.cpp" line="64"/>
         <source>Sonic Visualiser: Application Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="68"/>
+        <location filename="../main/PreferencesDialog.cpp" line="78"/>
         <source>Apply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="223"/>
+        <location filename="../main/PreferencesDialog.cpp" line="152"/>
+        <source>Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="239"/>
+        <location filename="../main/PreferencesDialog.cpp" line="665"/>
+        <location filename="../main/PreferencesDialog.cpp" line="680"/>
+        <source>(auto)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="273"/>
         <source>&lt;home directory&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="273"/>
+        <location filename="../main/PreferencesDialog.cpp" line="323"/>
         <source>Follow system locale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="287"/>
+        <location filename="../main/PreferencesDialog.cpp" line="337"/>
         <source>Russian</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="288"/>
+        <location filename="../main/PreferencesDialog.cpp" line="338"/>
         <source>British English</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="289"/>
+        <location filename="../main/PreferencesDialog.cpp" line="339"/>
         <source>American English</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="290"/>
+        <location filename="../main/PreferencesDialog.cpp" line="340"/>
         <source>Czech</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="348"/>
-        <location filename="../main/PreferencesDialog.cpp" line="352"/>
-        <location filename="../main/PreferencesDialog.cpp" line="356"/>
-        <location filename="../main/PreferencesDialog.cpp" line="363"/>
-        <location filename="../main/PreferencesDialog.cpp" line="371"/>
-        <location filename="../main/PreferencesDialog.cpp" line="388"/>
-        <location filename="../main/PreferencesDialog.cpp" line="400"/>
-        <location filename="../main/PreferencesDialog.cpp" line="418"/>
+        <location filename="../main/PreferencesDialog.cpp" line="407"/>
+        <location filename="../main/PreferencesDialog.cpp" line="429"/>
+        <location filename="../main/PreferencesDialog.cpp" line="435"/>
+        <location filename="../main/PreferencesDialog.cpp" line="440"/>
+        <location filename="../main/PreferencesDialog.cpp" line="445"/>
+        <location filename="../main/PreferencesDialog.cpp" line="462"/>
+        <location filename="../main/PreferencesDialog.cpp" line="467"/>
+        <location filename="../main/PreferencesDialog.cpp" line="482"/>
+        <location filename="../main/PreferencesDialog.cpp" line="566"/>
+        <location filename="../main/PreferencesDialog.cpp" line="571"/>
+        <location filename="../main/PreferencesDialog.cpp" line="598"/>
+        <location filename="../main/PreferencesDialog.cpp" line="602"/>
+        <location filename="../main/PreferencesDialog.cpp" line="606"/>
+        <location filename="../main/PreferencesDialog.cpp" line="611"/>
+        <source>%1:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../main/PreferencesDialog.cpp" line="424"/>
-        <location filename="../main/PreferencesDialog.cpp" line="429"/>
-        <location filename="../main/PreferencesDialog.cpp" line="434"/>
-        <location filename="../main/PreferencesDialog.cpp" line="451"/>
-        <location filename="../main/PreferencesDialog.cpp" line="456"/>
-        <location filename="../main/PreferencesDialog.cpp" line="471"/>
-        <source>%1:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="348"/>
+        <source>Overview waveform colour:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="490"/>
+        <source>Run Vamp plugins in separate process:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="506"/>
+        <source>Default session template when loading audio files:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="513"/>
+        <source>(Use &quot;%1&quot; in the File menu to add to these.)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="514"/>
+        <source>Export Session as Template...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="556"/>
+        <source>Audio service:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="560"/>
+        <source>Audio playback device:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="563"/>
+        <source>Audio record device:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="579"/>
+        <source>A&amp;udio I/O</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="589"/>
+        <source>&amp;Plugins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="598"/>
         <source>User interface language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="352"/>
+        <location filename="../main/PreferencesDialog.cpp" line="602"/>
         <source>Allow network usage</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="379"/>
-        <source>&amp;General</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="395"/>
+        <location filename="../main/PreferencesDialog.cpp" line="402"/>
         <source>Draw layers at Retina resolution:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="405"/>
+        <location filename="../main/PreferencesDialog.cpp" line="412"/>
         <source>Default spectrogram colour:</source>
         <translation type="unfinished">Default spectrogram color:</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="409"/>
+        <location filename="../main/PreferencesDialog.cpp" line="416"/>
         <source>Default melodic spectrogram colour:</source>
         <translation type="unfinished">Default melodic spectrogram color:</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="413"/>
+        <location filename="../main/PreferencesDialog.cpp" line="420"/>
         <source>Default colour 3D plot colour:</source>
         <translation type="unfinished">Default color 3d plot color:</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="442"/>
+        <location filename="../main/PreferencesDialog.cpp" line="453"/>
         <source>&amp;Appearance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="481"/>
+        <location filename="../main/PreferencesDialog.cpp" line="497"/>
         <source>Anal&amp;ysis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="490"/>
-        <source>Default session template for audio files:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="501"/>
+        <location filename="../main/PreferencesDialog.cpp" line="521"/>
         <source>Standard Waveform</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="526"/>
+        <location filename="../main/PreferencesDialog.cpp" line="546"/>
         <source>Session &amp;Template</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="531"/>
+        <location filename="../main/PreferencesDialog.cpp" line="621"/>
+        <source>&amp;Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="626"/>
         <source>OK</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="532"/>
+        <location filename="../main/PreferencesDialog.cpp" line="627"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="685"/>
+        <location filename="../main/PreferencesDialog.cpp" line="873"/>
         <source>Select a directory to create cache subdirectory in</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="783"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1012"/>
         <source>Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="784"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1013"/>
         <source>&lt;b&gt;Restart required&lt;/b&gt;&lt;p&gt;One or more of the application preferences you have changed may not take full effect until Sonic Visualiser is restarted.&lt;/p&gt;&lt;p&gt;Please exit and restart the application now if you want these changes to take effect immediately.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="805"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1046"/>
         <source>Preferences Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="806"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1047"/>
         <source>Some preferences have been changed but not applied.
 Apply them before closing?</source>
         <translation type="unfinished"></translation>
@@ -5944,7 +6444,7 @@
 <context>
     <name>ProgressDialog</name>
     <message>
-        <location filename="../svgui/widgets/ProgressDialog.cpp" line="28"/>
+        <location filename="../svgui/widgets/ProgressDialog.cpp" line="31"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5952,83 +6452,73 @@
 <context>
     <name>PropertyBox</name>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="160"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="219"/>
         <source>Show</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="177"/>
-        <source>Play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="216"/>
-        <source>Playback Gain</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="218"/>
-        <source>dB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="242"/>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="244"/>
-        <source>Playback Pan / Balance</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="483"/>
         <source>Add New Colour...</source>
-        <translation type="unfinished">Add New Color...</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="674"/>
+        <translation type="obsolete">Add New Color...</translation>
+    </message>
+    <message>
         <source>Name New Colour</source>
-        <translation type="unfinished">Name New Color</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="675"/>
+        <translation type="obsolete">Name New Color</translation>
+    </message>
+    <message>
         <source>Enter a name for the new colour:</source>
-        <translation type="unfinished">Enter a name for the new color:</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="677"/>
+        <translation type="obsolete">Enter a name for the new color:</translation>
+    </message>
+    <message>
         <source>Prefer black background for this colour</source>
-        <translation type="unfinished">Prefer black background for this color</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="788"/>
+        <translation type="obsolete">Prefer black background for this color</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="169"/>
+        <source>Click to toggle playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="746"/>
         <source>Set playback clip:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="856"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="807"/>
+        <source>Adjust playback level and pan of %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="817"/>
+        <source>Change sound used for playback (currently &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="831"/>
         <source> (current value: %1%2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="858"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="833"/>
         <source> (current value: %1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="863"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="838"/>
         <source>Toggle Visibility of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="865"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="840"/>
         <source>Toggle Playback of %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="869"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="844"/>
         <source>Toggle %1 property of %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="872"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="847"/>
         <source>Adjust %1 property of %2%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6066,7 +6556,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/PropertyContainer.cpp" line="250"/>
+        <location filename="../svcore/base/PropertyContainer.cpp" line="251"/>
         <source>Set %1 Property</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6087,7 +6577,7 @@
 <context>
     <name>QApplication</name>
     <message>
-        <location filename="../main/main.cpp" line="260"/>
+        <location filename="../main/main.cpp" line="262"/>
         <source>
 Sonic Visualiser is a program for viewing and exploring audio data
 for semantic music analysis and annotation.
@@ -6103,7 +6593,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="270"/>
+        <location filename="../main/main.cpp" line="272"/>
         <source>Sonic Visualiser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6111,13 +6601,13 @@
 <context>
     <name>QFile</name>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="52"/>
+        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="53"/>
         <location filename="../svcore/data/fileio/PlaylistFileReader.cpp" line="69"/>
         <source>File &quot;%1&quot; does not exist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="54"/>
+        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="55"/>
         <location filename="../svcore/data/fileio/PlaylistFileReader.cpp" line="72"/>
         <source>Failed to open file &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
@@ -6132,18 +6622,18 @@
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../main/main.cpp" line="522"/>
-        <location filename="../main/main.cpp" line="527"/>
+        <location filename="../main/main.cpp" line="539"/>
+        <location filename="../main/main.cpp" line="544"/>
         <source>Failed to open file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="523"/>
+        <location filename="../main/main.cpp" line="540"/>
         <source>File or URL &quot;%1&quot; could not be opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="528"/>
+        <location filename="../main/main.cpp" line="545"/>
         <source>&lt;b&gt;Audio required&lt;/b&gt;&lt;p&gt;Please load at least one audio file before importing annotation data</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6151,37 +6641,114 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="164"/>
-        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="170"/>
-        <source>Failed to load library</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="172"/>
-        <source>Failed to query plugins from library after loading</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="174"/>
-        <source>Unknown failure</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="176"/>
-        <source>Success: internal error?</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>QuickTimeFileReader</name>
-    <message>
-        <location filename="../svcore/data/fileio/QuickTimeFileReader.cpp" line="226"/>
-        <source>Decoding %1...</source>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="92"/>
+        <source>External plugin host executable does not appear to be installed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="244"/>
+        <source>Could not start external plugin host</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="260"/>
+        <source>External plugin host exited unexpectedly while listing plugins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="264"/>
+        <source>External plugin host invocation failed: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="193"/>
+        <source>&lt;b&gt;Failed to scan for plugins&lt;/b&gt;&lt;p&gt;Failed to scan for plugins at startup. Possibly the plugin checker program was not correctly installed alongside %1?&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="200"/>
+        <source>&lt;b&gt;Did not scan for plugins&lt;/b&gt;&lt;p&gt;Apparently no scan for plugins was attempted (internal error?)&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="213"/>
+        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="216"/>
+        <source>&lt;p&gt;These plugins may be incompatible with the system, and will be ignored during this run of %1.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="89"/>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="107"/>
+        <source>&lt;unknown&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="93"/>
+        <source>Green</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="94"/>
+        <source>White on Black</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="95"/>
+        <source>Black on White</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="96"/>
+        <source>Cherry</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="97"/>
+        <source>Wasp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="98"/>
+        <source>Ice</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="99"/>
+        <source>Sunset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="100"/>
+        <source>Fruit Salad</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="101"/>
+        <source>Banded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="102"/>
+        <source>Highlight</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="103"/>
+        <source>Printer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="104"/>
+        <source>High Gain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2843"/>
+        <source>Exporting audio data...</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -6230,79 +6797,79 @@
 <context>
     <name>RegionLayer</name>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="54"/>
         <location filename="../svgui/layer/RegionLayer.cpp" line="55"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="56"/>
         <source>New Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="100"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="101"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="101"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="102"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="102"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="103"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="120"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="121"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="182"/>
         <source>Bars</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="183"/>
         <source>Segmentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="188"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="189"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="189"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="190"/>
         <source>Equal Spaced</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="190"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="191"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="191"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="192"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="396"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="397"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="398"/>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="424"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="399"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="425"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="433"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="434"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="438"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="439"/>
         <source>Time:	%1
 Value:	%2
 Duration:	%3
@@ -6310,7 +6877,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="443"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="444"/>
         <source>Time:	%1
 Value:	%2
 Duration:	%3
@@ -6318,63 +6885,63 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1139"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1140"/>
         <source>Draw Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1221"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1222"/>
         <source>Erase Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1281"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1282"/>
         <source>Drag Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1302"/>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1349"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1303"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1350"/>
         <source>Edit Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1304"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1305"/>
         <source>Relocate Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1307"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1308"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1366"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1367"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1392"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1393"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1432"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1433"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1479"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1480"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1480"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1481"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1494"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1495"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6425,7 +6992,7 @@
 <context>
     <name>RemoveLayerCommand</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="1240"/>
+        <location filename="../svapp/framework/Document.cpp" line="1190"/>
         <source>Delete %1 Layer</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6439,7 +7006,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/SVFileReader.cpp" line="469"/>
+        <location filename="../svapp/framework/SVFileReader.cpp" line="467"/>
         <source>Opening file or URL...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6460,13 +7027,13 @@
 <context>
     <name>SliceLayer</name>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="146"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="153"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="154"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="161"/>
         <source>%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="158"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="166"/>
         <source>Time:	%1 - %2
 Range:	%3 samples (%4)
 Bin:	%5
@@ -6474,139 +7041,139 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="164"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="172"/>
         <source>First</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="165"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="720"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="760"/>
         <source>Mean</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="165"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="721"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="761"/>
         <source>Peak</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="172"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="180"/>
         <source>Time:	%1 - %2
 Range:	%3 samples (%4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="510"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="529"/>
         <source>0dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="511"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="530"/>
         <source>-Inf</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="542"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="571"/>
         <source>x10</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="567"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="607"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="568"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="605"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="608"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="645"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="569"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="609"/>
         <source>Normalize</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="570"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="610"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="571"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="611"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="572"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="612"/>
         <source>Sampling Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="710"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="736"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="750"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="776"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="711"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="751"/>
         <source>Meter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="738"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="778"/>
         <source>Rev Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="748"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="751"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="788"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="791"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="719"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="759"/>
         <source>Any</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="573"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="613"/>
         <source>Bin Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="607"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="647"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="712"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="737"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="752"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="777"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="713"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="753"/>
         <source>Absolute</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="727"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="767"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="728"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="768"/>
         <source>Steps</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="729"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="769"/>
         <source>Blocks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="730"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="770"/>
         <source>Colours</source>
         <translation type="unfinished">Colors</translation>
     </message>
@@ -6614,22 +7181,22 @@
 <context>
     <name>SparseModel</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="153"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="163"/>
         <source>Sparse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="355"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="370"/>
         <source>Edit Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="371"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="386"/>
         <source>Insert Data Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="384"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="399"/>
         <source>Delete Data Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6637,7 +7204,7 @@
 <context>
     <name>SparseModel::AddPointCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="204"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="214"/>
         <source>Add Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6645,7 +7212,7 @@
 <context>
     <name>SparseModel::DeletePointCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="229"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="239"/>
         <source>Delete Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6653,7 +7220,7 @@
 <context>
     <name>SparseModel::RelabelCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="286"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="296"/>
         <source>Re-Label Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6740,358 +7307,362 @@
 <context>
     <name>SpectrogramLayer</name>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="177"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="219"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="252"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="292"/>
         <source>Colour</source>
         <translation type="unfinished">Color</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="178"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="253"/>
         <source>Colour Scale</source>
         <translation type="unfinished">Color Scale</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="179"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="254"/>
         <source>Window Size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="180"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="255"/>
         <source>Window Overlap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="256"/>
         <source>Normalization</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="257"/>
         <source>Bin Display</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="183"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="258"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="184"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="259"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="185"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="260"/>
         <source>Colour Rotation</source>
         <translation type="unfinished">Color Rotation</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="186"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="261"/>
         <source>Min Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="187"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="262"/>
         <source>Max Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="188"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="263"/>
         <source>Frequency Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="189"/>
-        <source>Smoothing</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="213"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="287"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="216"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="289"/>
         <source>Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="222"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="295"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="389"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="450"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="456"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="520"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="390"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="457"/>
         <source>Meter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="391"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="458"/>
         <source>dBV^2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="392"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="459"/>
         <source>dBV</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="393"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="460"/>
         <source>Phase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="405"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="414"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="466"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="479"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="406"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="467"/>
+        <source>Col</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="468"/>
+        <source>View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="469"/>
+        <source>Hybrid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="480"/>
         <source>25 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="407"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="481"/>
         <source>50 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="408"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="482"/>
         <source>75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="409"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="483"/>
         <source>87.5 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="410"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="484"/>
         <source>93.75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="420"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="490"/>
         <source>No min</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="421"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="491"/>
         <source>10 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="422"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="492"/>
         <source>20 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="423"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="493"/>
         <source>40 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="424"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="494"/>
         <source>100 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="425"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="495"/>
         <source>250 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="426"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="435"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="496"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="505"/>
         <source>500 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="427"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="436"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="497"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="506"/>
         <source>1 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="428"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="439"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="498"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="509"/>
         <source>4 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="429"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="499"/>
         <source>10 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="437"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="507"/>
         <source>1.5 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="438"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="508"/>
         <source>2 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="440"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="510"/>
         <source>6 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="441"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="511"/>
         <source>8 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="442"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="512"/>
         <source>12 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="443"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="513"/>
         <source>16 KHz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="444"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="514"/>
         <source>No max</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="451"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="521"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="457"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="527"/>
         <source>All Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="458"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="528"/>
         <source>Peak Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="459"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="529"/>
         <source>Frequencies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="462"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="532"/>
         <source>&lt;unknown&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="485"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="488"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="555"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="558"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1492"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1383"/>
         <source>FFT cache failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1493"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1384"/>
         <source>Failed to create the FFT model for this spectrogram.
 There may be insufficient memory or disc space to continue.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2968"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1952"/>
         <source>Peak Frequency:	%1 - %2 Hz
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2971"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1955"/>
         <source>Peak Frequency:	%1 Hz
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2979"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1963"/>
         <source>Peak Pitch:	%3 - %4
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2981"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1965"/>
         <source>Peak Pitch:	%2
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2992"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1976"/>
         <source>Time:	%1 - %2
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2996"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1980"/>
         <source>Time:	%1
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3001"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1985"/>
         <source>%1Bin Frequency:	%2 - %3 Hz
 %4Bin Pitch:	%5 - %6
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3009"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1993"/>
         <source>%1Bin Frequency:	%2 Hz
 %3Bin Pitch:	%4
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3022"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3027"/>
-        <source>-Inf</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3032"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2016"/>
         <source>dB:	%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3034"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2018"/>
         <source>dB:	%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3037"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2021"/>
         <source>
 Phase:	%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3039"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2023"/>
         <source>
 Phase:	%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3069"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2053"/>
         <source>43Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3216"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2126"/>
         <source>%1Hz</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7099,90 +7670,84 @@
 <context>
     <name>SpectrumLayer</name>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="140"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="145"/>
         <source>Window Size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="141"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="146"/>
         <source>Window Overlap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="142"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="147"/>
         <source>Show Peak Frequencies</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="166"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="171"/>
         <source>Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="167"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="172"/>
         <source>Bins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="222"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="227"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="223"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="228"/>
         <source>25 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="224"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="229"/>
         <source>50 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="225"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="230"/>
         <source>75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="226"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="231"/>
         <source>87.5 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="227"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="232"/>
         <source>93.75 %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="585"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="597"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="618"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="527"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="539"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="560"/>
         <source>%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="590"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="532"/>
         <source>%1 - %2 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="592"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="534"/>
         <source>%1 Hz</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="608"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="613"/>
-        <source>-Inf</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="620"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="562"/>
         <source>%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="626"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="568"/>
         <source>%1
 Bin:	%2 (%3)
 %4 value:	%5
@@ -7190,28 +7755,33 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="630"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="572"/>
         <source>First</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="631"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="573"/>
         <source>Mean</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="631"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="573"/>
         <source>Peak</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="635"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="577"/>
         <source>%1
 Bin:	%2 (%3)
 Value:	%4
 dB:	%5</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="721"/>
+        <source>Hz</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SubdividingMenu</name>
@@ -7414,105 +7984,105 @@
 <context>
     <name>TimeInstantLayer</name>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="44"/>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="481"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="46"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="485"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="84"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="86"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="124"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="126"/>
         <source>Instants</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="125"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="127"/>
         <source>Segmentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="226"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="228"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="228"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="230"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="239"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="241"/>
         <source>Time:	%1
 No label</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="242"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="244"/>
         <source>Time:	%1
 Label:	%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="485"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="489"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="515"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="519"/>
         <source>Add Point at %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="560"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="564"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="606"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="610"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="622"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="626"/>
         <source>Move Point to %1 s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="658"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="662"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="675"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="679"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="701"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="705"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="736"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="740"/>
         <source>Delete Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="779"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="783"/>
         <source>Re-align pasted instants?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="780"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="784"/>
         <source>The instants you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="794"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="798"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7520,227 +8090,227 @@
 <context>
     <name>TimeValueLayer</name>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="58"/>
         <location filename="../svgui/layer/TimeValueLayer.cpp" line="59"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1351"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="60"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1345"/>
         <source>New Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="112"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="148"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="113"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="149"/>
         <source>Plot Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="113"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="114"/>
         <source>Vertical Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="114"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="115"/>
         <source>Scale Units</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="115"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="116"/>
         <source>Draw Segment Division Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="116"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="117"/>
         <source>Show Derivative</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="144"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="145"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="229"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="230"/>
         <source>Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="230"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="231"/>
         <source>Stems</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="231"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="232"/>
         <source>Connected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="232"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="233"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="233"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="234"/>
         <source>Curve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="234"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="235"/>
         <source>Segmentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="235"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="236"/>
         <source>Discrete Curves</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="240"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="241"/>
         <source>Auto-Align</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="241"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="242"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="242"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="243"/>
         <source>Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="243"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="244"/>
         <source>+/-1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="600"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="601"/>
         <source>In progress</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="602"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="603"/>
         <source>No local points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="615"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="616"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="620"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="621"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="622"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="623"/>
         <source>%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="628"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="629"/>
         <source>Time:	%1
 Value:	%2
 No label</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="632"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="633"/>
         <source>Time:	%1
 Value:	%2
 Label:	%4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1358"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1352"/>
         <source>Draw Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1476"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1470"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1525"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1519"/>
         <source>Drag Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1548"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1593"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1542"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1587"/>
         <source>Edit Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1550"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1544"/>
         <source>Relocate Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1553"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1547"/>
         <source>Change Point Value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1610"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1604"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1636"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1630"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1671"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1665"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1718"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1712"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1719"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1713"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1733"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1727"/>
         <source>Paste</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1788"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1782"/>
         <source>The items you are pasting do not have values.
 What values do you want to use for these items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1790"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1784"/>
         <source>Some of the items you are pasting do not have values.
 What values do you want to use for these items?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1800"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1794"/>
         <source>Zero for all items</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1809"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1803"/>
         <source>Choose value calculation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1833"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1827"/>
         <source>Select cycle size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1834"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1828"/>
         <source>Cycle size:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7776,136 +8346,141 @@
 <context>
     <name>TransformFactory</name>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="386"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="387"/>
         <source> [\(&lt;].*$</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="457"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="551"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="445"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="536"/>
         <source>&lt;unknown maker&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="463"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="727"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="451"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="712"/>
         <source>Extract features using &quot;%1&quot; plugin (from %2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="466"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="730"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="454"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="715"/>
         <source>Extract features using &quot;%1&quot; output of &quot;%2&quot; plugin (from %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="471"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="735"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="459"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="720"/>
         <source>%1 using &quot;%2&quot; plugin (from %3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="474"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="738"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="462"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="723"/>
         <source>%1 using &quot;%2&quot; output of &quot;%3&quot; plugin (from %4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="320"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="321"/>
         <source>Analysis</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="324"/>
+        <source>Generator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="325"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="327"/>
+        <source>Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="552"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="705"/>
+        <source>%1: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="562"/>
+        <source>%1: Output %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="574"/>
+        <source>Extract &quot;%1&quot; data output from &quot;%2&quot; effect plugin (from %3)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="579"/>
+        <source>Extract data output %1 from &quot;%2&quot; effect plugin (from %3)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="323"/>
-        <source>Generator</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="324"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="326"/>
-        <source>Other</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="567"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="720"/>
-        <source>%1: %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="577"/>
-        <source>%1: Output %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="589"/>
-        <source>Extract &quot;%1&quot; data output from &quot;%2&quot; effect plugin (from %3)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="594"/>
-        <source>Extract data output %1 from &quot;%2&quot; effect plugin (from %3)</source>
+        <source>Effects Data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="322"/>
-        <source>Effects Data</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="321"/>
         <source>Effects</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="621"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="412"/>
+        <source>Failed to list Vamp plugins: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="606"/>
         <source>Transform audio signal with &quot;%1&quot; effect plugin (from %2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="627"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="612"/>
         <source>Generate audio signal using &quot;%1&quot; plugin (from %2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1153"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1191"/>
+        <source>Plugin type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1155"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1193"/>
+        <source>Category</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1156"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1194"/>
+        <source>System Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1157"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1195"/>
-        <source>Plugin type</source>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1158"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1196"/>
+        <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1159"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1197"/>
-        <source>Category</source>
+        <source>Maker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1160"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1198"/>
-        <source>System Identifier</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1161"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1199"/>
-        <source>Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1162"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1200"/>
-        <source>Description</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1163"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1201"/>
-        <source>Maker</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1164"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1202"/>
         <source>Units</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8111,166 +8686,171 @@
 <context>
     <name>View</name>
     <message>
-        <location filename="../svgui/view/View.cpp" line="96"/>
+        <location filename="../svgui/view/View.cpp" line="100"/>
         <source>Global Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="97"/>
+        <location filename="../svgui/view/View.cpp" line="101"/>
         <source>Global Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="98"/>
+        <location filename="../svgui/view/View.cpp" line="102"/>
         <source>Follow Playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="141"/>
+        <location filename="../svgui/view/View.cpp" line="145"/>
         <source>Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="142"/>
+        <location filename="../svgui/view/View.cpp" line="146"/>
         <source>Page</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="143"/>
+        <location filename="../svgui/view/View.cpp" line="147"/>
         <source>Off</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="146"/>
+        <location filename="../svgui/view/View.cpp" line="150"/>
         <source>&lt;unknown&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="1581"/>
+        <location filename="../svgui/view/View.cpp" line="1535"/>
         <source>Layer rendering error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="1603"/>
+        <location filename="../svgui/view/View.cpp" line="1557"/>
         <source>Alignment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2427"/>
+        <location filename="../svgui/view/View.cpp" line="2391"/>
         <source>Waiting for layers to be ready...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2428"/>
-        <location filename="../svgui/view/View.cpp" line="2457"/>
+        <location filename="../svgui/view/View.cpp" line="2392"/>
+        <location filename="../svgui/view/View.cpp" line="2421"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2456"/>
+        <location filename="../svgui/view/View.cpp" line="2420"/>
         <source>Rendering image...</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svgui/view/View.cpp" line="2537"/>
+        <source>Exported image from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ViewManager</name>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="371"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="388"/>
         <source>Clear Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="372"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="389"/>
         <source>Select Multiple Regions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="373"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="390"/>
         <source>Select Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="390"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="407"/>
         <source>Enter Navigate mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="391"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="408"/>
         <source>Enter Select mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="392"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="409"/>
         <source>Enter Edit mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="393"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="410"/>
         <source>Enter Draw mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="394"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="411"/>
         <source>Enter Erase mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="395"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="412"/>
         <source>Enter Measure mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="396"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="413"/>
         <source>Enter NoteEdit mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="432"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="449"/>
         <source>Switch on Loop mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="433"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="450"/>
         <source>Switch off Loop mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="447"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="464"/>
         <source>Switch on Play Selection mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="448"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="465"/>
         <source>Switch off Play Selection mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="462"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="479"/>
         <source>Switch on Play Solo mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="463"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="480"/>
         <source>Switch off Play Solo mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="477"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="494"/>
         <source>Switch on Alignment mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="478"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="495"/>
         <source>Switch off Alignment mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="581"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="643"/>
         <source>Scroll to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../svgui/view/ViewManager.cpp" line="642"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="712"/>
         <source>Zoom to %n sample(s) per pixel</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8278,7 +8858,7 @@
         </translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="652"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="722"/>
         <source>Change overlay level</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8286,118 +8866,111 @@
 <context>
     <name>WaveformLayer</name>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="106"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="135"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="109"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="138"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="107"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="110"/>
         <source>Gain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="108"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="111"/>
         <source>Normalize Visible Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="109"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="112"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="196"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="199"/>
         <source>Linear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="197"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="200"/>
         <source>Meter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="198"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="216"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="201"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="219"/>
         <source>dB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="204"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="207"/>
         <source>Separate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="205"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="208"/>
         <source>Mean</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="206"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="209"/>
         <source>Butterfly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="981"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="984"/>
         <source>Time:	%1 - %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="985"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="988"/>
         <source>Time:	%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1006"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1009"/>
         <source>Level:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1008"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1011"/>
         <source>Left:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1009"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1012"/>
         <source>Right:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1010"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1013"/>
         <source>Channel %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1033"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1036"/>
         <source>
 %1	%2 - %3 (%4 dB peak)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1036"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1039"/>
         <source>
 %1	%2 (%3 dB peak)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1203"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1256"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1266"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1206"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1259"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1269"/>
         <source>0dB</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1204"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1258"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1268"/>
-        <source>-Inf</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>WindowShapePreview</name>
     <message>
-        <location filename="../svgui/widgets/WindowShapePreview.cpp" line="118"/>
+        <location filename="../svgui/widgets/WindowShapePreview.cpp" line="120"/>
         <source>V / time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8410,7 +8983,7 @@
 <context>
     <name>WritableWaveFileModel</name>
     <message>
-        <location filename="../svcore/data/model/WritableWaveFileModel.h" line="124"/>
+        <location filename="../svcore/data/model/WritableWaveFileModel.h" line="147"/>
         <source>Writable Wave File</source>
         <translation type="unfinished"></translation>
     </message>
Binary file i18n/sonic-visualiser_ru.qm has changed
--- a/i18n/sonic-visualiser_ru.ts	Mon Sep 17 13:53:25 2018 +0100
+++ b/i18n/sonic-visualiser_ru.ts	Mon Sep 17 14:05:41 2018 +0100
@@ -4,17 +4,17 @@
 <context>
     <name>ActivityLog</name>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="37"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="39"/>
         <source>Activity Log</source>
         <translation>Журнал изменений</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="42"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="44"/>
         <source>&lt;p&gt;Activity Log lists your interactions and other events within %1.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Список всех предпринятых вами действий с %1.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/ActivityLog.cpp" line="77"/>
+        <location filename="../svgui/widgets/ActivityLog.cpp" line="79"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
@@ -22,7 +22,7 @@
 <context>
     <name>AddLayerCommand</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="1179"/>
+        <location filename="../svapp/framework/Document.cpp" line="1129"/>
         <source>Add %1 Layer</source>
         <translation>Добавить слой %1</translation>
     </message>
@@ -44,59 +44,85 @@
     </message>
 </context>
 <context>
+    <name>AlignmentView</name>
+    <message>
+        <location filename="../svgui/view/AlignmentView.cpp" line="31"/>
+        <source>AlignmentView</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioCallbackPlaySource</name>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="499"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="525"/>
         <source>Play from %1</source>
         <translation>Воспроизведение от %1</translation>
     </message>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="522"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="548"/>
         <source>Stop at %1</source>
         <translation>Остановка в позиции %1</translation>
     </message>
     <message>
-        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="1105"/>
+        <location filename="../svapp/audio/AudioCallbackPlaySource.cpp" line="1089"/>
         <source>Change time-stretch factor to %1</source>
         <translation>Смена коэффициента растяжения во времени на %1</translation>
     </message>
 </context>
 <context>
+    <name>AudioCallbackRecordTarget</name>
+    <message>
+        <location filename="../svapp/audio/AudioCallbackRecordTarget.cpp" line="271"/>
+        <source>recorded-%1.wav</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/audio/AudioCallbackRecordTarget.cpp" line="272"/>
+        <source>Recorded %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioDial</name>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="499"/>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="515"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="513"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="529"/>
         <source>Enter new value</source>
         <translation>Введите новое значение</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="416"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="429"/>
         <source>%1: %2%3</source>
         <translation>%1: %2%3</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="418"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="419"/>
+        <source>%1: %2</source>
+        <translation type="unfinished">%1: %2</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="431"/>
         <source>%2%3</source>
         <translation>%2%3</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="481"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="495"/>
         <source>New value for %1, from %2 to %3 %4:</source>
         <translation>Новое значение для «%1», от %2 до %3 %4:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="484"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="498"/>
         <source>New value for %1, from %2 to %3:</source>
         <translation>Новое значение для «%1», от %2 до %3:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="489"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="503"/>
         <source>Enter a new value from %1 to %2 %3:</source>
         <translation>Введите новое значение от %1 до %2 %3:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="492"/>
-        <location filename="../svgui/widgets/AudioDial.cpp" line="516"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="506"/>
+        <location filename="../svgui/widgets/AudioDial.cpp" line="530"/>
         <source>Enter a new value from %1 to %2:</source>
         <translation>Введите новое значение от %1 до %2:</translation>
     </message>
@@ -127,72 +153,82 @@
 <context>
     <name>BZipFileDevice</name>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="51"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="59"/>
         <source>File is already open</source>
         <translation>Этот файл уже открыт</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="56"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="64"/>
         <source>Append mode not supported</source>
         <translation>Режим добавления в конец не поддерживается</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="62"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="70"/>
         <source>File access mode not specified</source>
         <translation>Способ доступа к файлам не указан</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="68"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="76"/>
         <source>Read and write modes both specified</source>
         <translation>Режимы чтения и записи определены</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="77"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="105"/>
         <source>Failed to open file for writing</source>
         <translation>Не удалось открыть файл для записи</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="88"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="112"/>
+        <source>Failed to open file handle for writing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="125"/>
         <source>Failed to open bzip2 stream for writing</source>
         <translation>Не удалось открыть поток bzip2 для записи</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="104"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="140"/>
         <source>Failed to open file for reading</source>
         <translation>Не удалось открыть файл для чтения</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="115"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="147"/>
+        <source>Failed to open file handle for reading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="159"/>
         <source>Failed to open bzip2 stream for reading</source>
         <translation>Не удалось открыть поток bzip2 для чтения</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="129"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="173"/>
         <source>Internal error (open for neither read nor write)</source>
         <translation>Внутренняя ошибка (не открывается ни на чтение, ни на запись)</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="138"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="182"/>
         <source>File not open</source>
         <translation>Файл не открыт</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="150"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="194"/>
         <source>bzip2 stream write close error</source>
         <translation>Ошибка закрытия записи в поток bzip2</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="162"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="207"/>
         <source>bzip2 stream read close error</source>
         <translation>Ошибка закрытия чтения потока bzip2</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="171"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="217"/>
         <source>Internal error (close for neither read nor write)</source>
         <translation>Внутренняя ошибка (не закрывается ни чтение, ни запись)</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="188"/>
+        <location filename="../svcore/data/fileio/BZipFileDevice.cpp" line="234"/>
         <source>bzip2 stream read error</source>
         <translation>Ошибка чтения потока bzip2</translation>
     </message>
@@ -212,8 +248,7 @@
 <context>
     <name>CSVFileWriter</name>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="67"/>
-        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="92"/>
+        <location filename="../svcore/data/fileio/CSVFileWriter.cpp" line="81"/>
         <source>Failed to open file %1 for writing</source>
         <translation>Не удалось открыть файл %1 для записи</translation>
     </message>
@@ -362,7 +397,7 @@
 <context>
     <name>Colour3DPlotLayer</name>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="750"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="837"/>
         <source>Time:	%1 - %2
 Bin:	%3
 Value:	%4</source>
@@ -371,111 +406,153 @@
 Значение:	%4</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="316"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="325"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="402"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="421"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="329"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="425"/>
         <source>&lt;unknown&gt;</source>
         <translation>&lt;неизвестно&gt;</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="177"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="223"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="269"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="310"/>
         <source>Colour</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="178"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="218"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="270"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="305"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="179"/>
         <source>Normalize Columns</source>
-        <translation>Нормализовать столбцы</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="180"/>
+        <translation type="vanished">Нормализовать столбцы</translation>
+    </message>
+    <message>
         <source>Normalize Visible Area</source>
-        <translation>Нормализовать видимую область</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="317"/>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="326"/>
+        <translation type="vanished">Нормализовать видимую область</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="403"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="422"/>
         <source>Log</source>
         <translation>Логарифмический</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="318"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="404"/>
         <source>+/-1</source>
         <translation>±1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="272"/>
         <source>Invert Vertical Scale</source>
         <translation>Инвертировать масштаб по вертикали</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="183"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="274"/>
         <source>Always Opaque</source>
         <translation>Всегда непрозрачно</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="319"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="405"/>
         <source>Absolute</source>
         <translation>Абсолютный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="273"/>
         <source>Gain</source>
-        <translation type="unfinished">Усиление</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="184"/>
+        <translation>Усиление</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="271"/>
+        <source>Normalization</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="275"/>
         <source>Smooth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="185"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="276"/>
         <source>Bin Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="220"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="307"/>
         <source>Bins</source>
         <translation type="unfinished">Бины</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="336"/>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="411"/>
+        <source>None</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="412"/>
+        <source>Col</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="413"/>
+        <source>View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="414"/>
+        <source>Hybrid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/Colour3DPlotLayer.cpp" line="448"/>
         <source>dB</source>
         <translation>Дб</translation>
     </message>
 </context>
 <context>
+    <name>ColourComboBox</name>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="59"/>
+        <source>Name New Colour</source>
+        <translation type="unfinished">Дайте цвету название</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="60"/>
+        <source>Enter a name for the new colour:</source>
+        <translation type="unfinished">Введите название нового цвета:</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="62"/>
+        <source>Prefer black background for this colour</source>
+        <translation type="unfinished">Предпочитать черный фон для этого цвета</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/ColourComboBox.cpp" line="94"/>
+        <source>Add New Colour...</source>
+        <translation type="unfinished">Добавить новый цвет...</translation>
+    </message>
+</context>
+<context>
     <name>ColourMapper</name>
     <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="88"/>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="106"/>
         <source>&lt;unknown&gt;</source>
-        <translation>&lt;неизвестно&gt;</translation>
+        <translation type="vanished">&lt;неизвестно&gt;</translation>
     </message>
     <message>
         <source>Default</source>
         <translation type="vanished">По умолчанию</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="93"/>
         <source>White on Black</source>
-        <translation>Белое на чёрном</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="94"/>
+        <translation type="vanished">Белое на чёрном</translation>
+    </message>
+    <message>
         <source>Black on White</source>
-        <translation>Чёрное на белом</translation>
+        <translation type="vanished">Чёрное на белом</translation>
     </message>
     <message>
         <source>Red on Blue</source>
@@ -490,54 +567,28 @@
         <translation type="vanished">Синее на чёрном</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="92"/>
         <source>Green</source>
-        <translation type="unfinished">Зелёный</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="95"/>
-        <source>Cherry</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="96"/>
-        <source>Wasp</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="97"/>
-        <source>Ice</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="98"/>
+        <translation type="obsolete">Зелёный</translation>
+    </message>
+    <message>
         <source>Sunset</source>
-        <translation>Закат</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="99"/>
+        <translation type="vanished">Закат</translation>
+    </message>
+    <message>
         <source>Fruit Salad</source>
-        <translation>Фруктовый салат</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="100"/>
+        <translation type="vanished">Фруктовый салат</translation>
+    </message>
+    <message>
         <source>Banded</source>
-        <translation>В полоску</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="101"/>
+        <translation type="vanished">В полоску</translation>
+    </message>
+    <message>
         <source>Highlight</source>
-        <translation>Подсветка</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="102"/>
+        <translation type="vanished">Подсветка</translation>
+    </message>
+    <message>
         <source>Printer</source>
-        <translation>Принтер</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/ColourMapper.cpp" line="103"/>
-        <source>High Gain</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Принтер</translation>
     </message>
 </context>
 <context>
@@ -619,7 +670,7 @@
 <context>
     <name>DecodingWavFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/DecodingWavFileReader.cpp" line="66"/>
+        <location filename="../svcore/data/fileio/DecodingWavFileReader.cpp" line="68"/>
         <source>Decoding %1...</source>
         <translation type="unfinished">Декодируется %1...</translation>
     </message>
@@ -627,7 +678,7 @@
 <context>
     <name>Dense3DModelPeakCache</name>
     <message>
-        <location filename="../svcore/data/model/Dense3DModelPeakCache.h" line="79"/>
+        <location filename="../svcore/data/model/Dense3DModelPeakCache.h" line="94"/>
         <source>Dense 3-D Peak Cache</source>
         <translation type="unfinished"></translation>
     </message>
@@ -635,17 +686,17 @@
 <context>
     <name>DenseThreeDimensionalModel</name>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="120"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="121"/>
         <source>Dense 3-D</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="137"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="138"/>
         <source>Time</source>
         <translation>Время</translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="138"/>
+        <location filename="../svcore/data/model/DenseThreeDimensionalModel.h" line="139"/>
         <source>Frame</source>
         <translation>Выборка</translation>
     </message>
@@ -653,7 +704,7 @@
 <context>
     <name>DenseTimeValueModel</name>
     <message>
-        <location filename="../svcore/data/model/DenseTimeValueModel.h" line="82"/>
+        <location filename="../svcore/data/model/DenseTimeValueModel.h" line="89"/>
         <source>Dense Time-Value</source>
         <translation type="unfinished"></translation>
     </message>
@@ -661,12 +712,12 @@
 <context>
     <name>Document</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="415"/>
+        <location filename="../svapp/framework/Document.cpp" line="421"/>
         <source>Set main model to %1</source>
         <translation>Сделать %1 основной моделью</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="417"/>
+        <location filename="../svapp/framework/Document.cpp" line="423"/>
         <source>Clear main model</source>
         <translation>Очистить основную модель</translation>
     </message>
@@ -674,7 +725,7 @@
 <context>
     <name>EditableDenseThreeDimensionalModel</name>
     <message>
-        <location filename="../svcore/data/model/EditableDenseThreeDimensionalModel.h" line="182"/>
+        <location filename="../svcore/data/model/EditableDenseThreeDimensionalModel.h" line="189"/>
         <source>Editable Dense 3-D</source>
         <translation type="unfinished"></translation>
     </message>
@@ -682,12 +733,12 @@
 <context>
     <name>FFTModel</name>
     <message>
-        <location filename="../svcore/data/model/FFTModel.cpp" line="92"/>
+        <location filename="../svcore/data/model/FFTModel.cpp" line="100"/>
         <source>%1 Hz</source>
         <translation>%1 Гц</translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/FFTModel.h" line="138"/>
+        <location filename="../svcore/data/model/FFTModel.h" line="140"/>
         <source>FFT</source>
         <translation>FFT</translation>
     </message>
@@ -718,68 +769,68 @@
 <context>
     <name>FeatureExtractionModelTransformer</name>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="84"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="87"/>
         <source>Transforms supplied to a single FeatureExtractionModelTransformer instance must be similar in every respect except plugin output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="97"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="101"/>
         <source>No factory available for feature extraction plugin id &quot;%1&quot; (unknown plugin type, or internal error?)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="103"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="108"/>
         <source>Input model for feature extraction plugin &quot;%1&quot; is of wrong type (internal error?)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="109"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="118"/>
         <source>Failed to instantiate plugin &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="124"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="134"/>
         <source>Cannot provide enough channels to feature extraction plugin &quot;%1&quot; (plugin min is %2, max %3; input model has %4)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="156"/>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="171"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="164"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="191"/>
         <source>Failed to initialise feature extraction plugin &quot;%1&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="161"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="176"/>
         <source>Feature extraction plugin &quot;%1&quot; rejected the given step and block sizes (%2 and %3); using plugin defaults (%4 and %5) instead</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="179"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="202"/>
         <source>Transform was configured for version %1 of plugin &quot;%2&quot;, but the plugin being used is version %3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="194"/>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="218"/>
         <source>Plugin &quot;%1&quot; has no outputs</source>
-        <translation>У расширения &quot;%1&quot; нет выходов</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="212"/>
+        <translation>У плагина &quot;%1&quot; нет выходов</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/FeatureExtractionModelTransformer.cpp" line="237"/>
         <source>Plugin &quot;%1&quot; has no output named &quot;%2&quot;</source>
-        <translation>У расширения &quot;%1&quot; нет выхода с названием &quot;%2&quot;</translation>
+        <translation>У плагина &quot;%1&quot; нет выхода с названием &quot;%2&quot;</translation>
     </message>
 </context>
 <context>
     <name>FileSource</name>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="124"/>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="206"/>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="239"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="122"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="204"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="237"/>
         <source>Unsupported scheme in URL</source>
         <translation>Неподдерживаемая схема URL</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="452"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="450"/>
         <source>Downloading %1...</source>
         <translation>Скачивается %1...</translation>
     </message>
@@ -800,17 +851,17 @@
         <translation type="vanished">Скачивание с FTP-сервера прервано</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="746"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="744"/>
         <source>Download cancelled</source>
         <translation>Скачивание отменено</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="774"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="772"/>
         <source>Failed to create local file %1</source>
         <translation>Не удалось создать локальный файл %1</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/FileSource.cpp" line="777"/>
+        <location filename="../svcore/data/fileio/FileSource.cpp" line="775"/>
         <source>File contains no data!</source>
         <translation>Файл не содержит данных!</translation>
     </message>
@@ -818,75 +869,75 @@
 <context>
     <name>FlexiNoteLayer</name>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="69"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="70"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="971"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="72"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="73"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="974"/>
         <source>New Point</source>
         <translation type="unfinished">Новая точка</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="107"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="110"/>
         <source>Vertical Scale</source>
         <translation type="unfinished">Верт. масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="108"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="111"/>
         <source>Scale Units</source>
         <translation type="unfinished">Единицы шкалы</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="124"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="127"/>
         <source>Scale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="173"/>
+        <translation>Масштаб</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="176"/>
         <source>Auto-Align</source>
-        <translation type="unfinished">Автовыравнивание</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="174"/>
+        <translation>Автовыравнивание</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="177"/>
         <source>Linear</source>
-        <translation type="unfinished">Линейный</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="175"/>
+        <translation>Линейный</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="178"/>
         <source>Log</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="176"/>
+        <translation>Логарифмический</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="179"/>
         <source>MIDI Notes</source>
         <translation type="unfinished">Ноты MIDI</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="518"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="521"/>
         <source>In progress</source>
         <translation type="unfinished">В процессе</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="520"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="544"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="523"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="547"/>
         <source>No local points</source>
         <translation type="unfinished">Нет локальных точек</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="558"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="561"/>
         <source>%1 (%2, %3 Hz)</source>
         <translation type="unfinished">%1 (%2, %3 Гц)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="565"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="568"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished">%1Гц (%2, %3)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="571"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="574"/>
         <source>%1 %2</source>
         <translation type="unfinished">%1 %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="578"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="581"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -897,7 +948,7 @@
 Без метки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="583"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="586"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -908,85 +959,85 @@
 Метка:	%4</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="976"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="979"/>
         <source>Draw Point</source>
         <translation type="unfinished">Нарисовать точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1052"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1055"/>
         <source>Erase Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1133"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1136"/>
         <source>Drag Point</source>
         <translation type="unfinished">Перетащить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1215"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1288"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1608"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1218"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1291"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1611"/>
         <source>Edit Point</source>
         <translation type="unfinished">Изменить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1217"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1220"/>
         <source>Relocate Point</source>
         <translation type="unfinished">Переместить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1220"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1223"/>
         <source>Change Point Value</source>
         <translation type="unfinished">Изменить значение точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1352"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1355"/>
         <source>Add Point</source>
         <translation type="unfinished">Добавить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1392"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1395"/>
         <source>Snap Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1441"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1444"/>
         <source>Merge Notes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1624"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1627"/>
         <source>Drag Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1649"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1652"/>
         <source>Resize Selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1688"/>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1710"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1691"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1713"/>
         <source>Delete Selected Points</source>
         <translation type="unfinished">Удалить выбранные точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1759"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1762"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished">Заново выровнять вставленные объекты?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1760"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1763"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1774"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1777"/>
         <source>Paste</source>
         <translation type="unfinished">Вставить</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1845"/>
+        <location filename="../svgui/layer/FlexiNoteLayer.cpp" line="1848"/>
         <source>Record FlexiNote</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1001,7 +1052,7 @@
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="171"/>
         <source>Time</source>
-        <translation type="unfinished">Время</translation>
+        <translation>Время</translation>
     </message>
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="172"/>
@@ -1011,32 +1062,32 @@
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="173"/>
         <source>Pitch</source>
-        <translation type="unfinished">Высота тона</translation>
+        <translation>Высота тона</translation>
     </message>
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="174"/>
         <source>Duration</source>
-        <translation type="unfinished">Длительность</translation>
+        <translation>Длительность</translation>
     </message>
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="175"/>
         <source>Level</source>
-        <translation type="unfinished">Уровень</translation>
+        <translation>Уровень</translation>
     </message>
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="176"/>
         <source>Label</source>
-        <translation type="unfinished">Метка</translation>
+        <translation>Метка</translation>
     </message>
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="177"/>
         <source>Unknown</source>
-        <translation type="unfinished"></translation>
+        <translation>Неизвестно</translation>
     </message>
     <message>
         <location filename="../svcore/data/model/FlexiNoteModel.h" line="207"/>
         <source>Edit Data</source>
-        <translation type="unfinished">Изменить данные</translation>
+        <translation>Изменить данные</translation>
     </message>
 </context>
 <context>
@@ -1202,21 +1253,21 @@
     <name>InteractiveFileFinder</name>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="66"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="233"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="241"/>
         <source>Select file</source>
         <translation>Выберите файл</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="67"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="234"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="242"/>
         <source>All files (*.*)</source>
         <translation>Все файлы (*.*)</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="73"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="240"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="248"/>
         <source>Select a session file</source>
-        <translation>Выберите файл сеанса</translation>
+        <translation>Выберите файл сессии</translation>
     </message>
     <message>
         <source>Sonic Visualiser session files (*.sv)
@@ -1303,54 +1354,54 @@
 Все файлы (*.*)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="188"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="196"/>
         <source>File does not exist</source>
         <translation>Файл не существует</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="189"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="197"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; does not exist</source>
         <translation>&lt;b&gt;Файл не найден&lt;/b&gt;&lt;p&gt;Файл &quot;%1&quot; не существует</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="194"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="202"/>
         <source>File is not readable</source>
         <translation>Файл нечитаем</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="195"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="203"/>
         <source>&lt;b&gt;File is not readable&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; can not be read</source>
         <translation>&lt;b&gt;Файл нечитаем&lt;/b&gt;&lt;p&gt;Файл &quot;%1&quot; не может быть прочитан</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="200"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="389"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="208"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="408"/>
         <source>Directory selected</source>
         <translation>Выбран каталог</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="201"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="390"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="209"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="409"/>
         <source>&lt;b&gt;Directory selected&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; is a directory</source>
         <translation>&lt;b&gt;Выбран каталог&lt;/b&gt;&lt;p&gt;Файл &quot;%1&quot; является каталогом</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="206"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="214"/>
         <source>Non-file selected</source>
         <translation>Выбран не файл</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="207"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="215"/>
         <source>&lt;b&gt;Not a file&lt;/b&gt;&lt;p&gt;Path &quot;%1&quot; is not a file</source>
         <translation>&lt;b&gt;Это не файл&lt;/b&gt;&lt;p&gt;Путь &quot;%1&quot; не является файлом</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="212"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="220"/>
         <source>File is empty</source>
         <translation>Файл пуст</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="213"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="221"/>
         <source>&lt;b&gt;File is empty&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; is empty</source>
         <translation>&lt;b&gt;Пустой файл&lt;/b&gt;&lt;p&gt;Файл &quot;%1&quot; пуст</translation>
     </message>
@@ -1397,10 +1448,22 @@
 Audio files (%2)
 RDF files (%1)
 All files (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Все поддерживаемые типы файлов (*.sv %1 %2)
+Файлы сессий %3 (*.%4)
+Звуковые файлы (%2)
+Файлы RDF (%1)
+Все файлы (*.*)</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="140"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="297"/>
+        <source>Scalable Vector Graphics files (*.svg)
+All files (*.*)</source>
+        <translation>Файлы Scalable Vector Graphics (*.svg)
+Все файлы (*.*)</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="145"/>
         <source>Comma-separated data files (*.csv)
 Space-separated .lab files (*.lab)
 Text files (*.txt)
@@ -1408,7 +1471,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="145"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="150"/>
         <source>All supported files (*.sv %1 %2 %3)
 %4 session files (*.%5)
 Audio files (%1)
@@ -1418,31 +1481,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="241"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="249"/>
         <source>%1 session files (*.%2)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="248"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="254"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="260"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="266"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="272"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="282"/>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="288"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="256"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="262"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="268"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="274"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="280"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="290"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="296"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="302"/>
         <source>Select a file to export to</source>
         <translation>Выберите файл, в который экспортировать</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="249"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="257"/>
         <source>WAV audio files (*.wav)
 All files (*.*)</source>
         <translation>Звуковые файлы WAV (*.wav)
 Все файлы (*.*)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="255"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="263"/>
         <source>Sonic Visualiser Layer XML files (*.svl)
 Comma-separated data files (*.csv)
 RDF/Turtle files (%1)
@@ -1457,7 +1521,7 @@
 Все файлы (*.*)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="261"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="269"/>
         <source>Sonic Visualiser Layer XML files (*.svl)
 Comma-separated data files (*.csv)
 RDF/Turtle files (%1)
@@ -1470,7 +1534,7 @@
 Все файлы (*.*)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="267"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="275"/>
         <source>Comma-separated data files (*.csv)
 Sonic Visualiser Layer XML files (*.svl)
 RDF/Turtle files (%1)
@@ -1480,7 +1544,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="273"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="281"/>
         <source>Comma-separated data files (*.csv)
 Sonic Visualiser Layer XML files (*.svl)
 RDF/Turtle files (%1)
@@ -1489,82 +1553,82 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="283"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="291"/>
         <source>Portable Network Graphics files (*.png)
 All files (*.*)</source>
         <translation>Файлы Portable Network Graphics (*.png)
 Все файлы (*.*)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="289"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="303"/>
         <source>Comma-separated data files (*.csv)
 Text files (*.txt)
 All files (*.*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="395"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="414"/>
         <source>File exists</source>
         <translation>Такой файл уже существует</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="396"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="415"/>
         <source>&lt;b&gt;File exists&lt;/b&gt;&lt;p&gt;The file &quot;%1&quot; already exists.
 Do you want to overwrite it?</source>
         <translation>&lt;b&gt;Файл существует&lt;/b&gt;Файл &quot;%1&quot; уже существует.
 Вы хотите перезаписать его?</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="544"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="567"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;Audio file &quot;%1&quot; could not be opened.
 Do you want to locate it?</source>
         <translation>&lt;b&gt;Файл не найден&lt;/b&gt;&lt;p&gt;Не удалось открыть звуковой файл &quot;%1&quot;.
 Вы хотите указать его программе?</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="546"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="569"/>
         <source>&lt;b&gt;File not found&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; could not be opened.
 Do you want to locate it?</source>
         <translation>&lt;b&gt;Файл не найден&lt;/b&gt;&lt;p&gt;Не удалось открыть файл &quot;%1&quot;.
 Вы хотите указать его программе?</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="556"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="579"/>
         <source>Failed to open file</source>
         <translation>Не удалось открыть файл</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="558"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="581"/>
         <source>Locate file...</source>
         <translation>Указать файл...</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="559"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="582"/>
         <source>Use URL...</source>
         <translation>Использовать URL...</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="560"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="583"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="579"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="602"/>
         <source>Use URL</source>
         <translation>Использовать URL</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="580"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="603"/>
         <source>Please enter the URL to use for this file:</source>
         <translation>Укажите URL, который будет использоваться для этого файла:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="588"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="611"/>
         <source>Failed to open location</source>
         <translation>Не удалось открыть местоположение</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="589"/>
+        <location filename="../svgui/widgets/InteractiveFileFinder.cpp" line="612"/>
         <source>&lt;b&gt;Failed to open location&lt;/b&gt;&lt;p&gt;URL &quot;%1&quot; could not be opened</source>
         <translation>&lt;b&gt;Не удалось открыть местоположение&lt;/b&gt;&lt;p&gt;Не удалось открыть URL &quot;%1&quot;.</translation>
     </message>
@@ -1752,6 +1816,7 @@
     </message>
     <message>
         <location filename="../svcore/data/model/Labeller.h" line="159"/>
+        <location filename="../svcore/data/model/Labeller.h" line="259"/>
         <source>%1.%2</source>
         <translation>%1.%2</translation>
     </message>
@@ -1761,10 +1826,20 @@
         <translation>%1</translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/Labeller.h" line="182"/>
+        <location filename="../svcore/data/model/Labeller.h" line="185"/>
         <source>Label Points</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../svcore/data/model/Labeller.h" line="232"/>
+        <source>Subdivide Points</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/data/model/Labeller.h" line="276"/>
+        <source>Winnow Points</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Layer</name>
@@ -1911,6 +1986,22 @@
     </message>
 </context>
 <context>
+    <name>LevelPanToolButton</name>
+    <message>
+        <location filename="../svgui/widgets/LevelPanToolButton.cpp" line="55"/>
+        <source>Click to adjust level and pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>LevelPanWidget</name>
+    <message>
+        <location filename="../svgui/widgets/LevelPanWidget.cpp" line="79"/>
+        <source>Drag vertically to adjust level, horizontally to adjust pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>MIDIFileImportDialog</name>
     <message>
         <location filename="../svgui/widgets/MIDIFileImportDialog.cpp" line="32"/>
@@ -2031,7 +2122,7 @@
 <context>
     <name>MIDIInput</name>
     <message>
-        <location filename="../svcore/data/midi/MIDIInput.cpp" line="30"/>
+        <location filename="../svcore/data/midi/MIDIInput.cpp" line="63"/>
         <source>Input</source>
         <translation>Вход</translation>
     </message>
@@ -2039,7 +2130,7 @@
 <context>
     <name>MP3FileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/MP3FileReader.cpp" line="116"/>
+        <location filename="../svcore/data/fileio/MP3FileReader.cpp" line="133"/>
         <source>Decoding %1...</source>
         <translation>Декодируется %1...</translation>
     </message>
@@ -2051,29 +2142,29 @@
         <translation type="obsolete">Sonic Visualiser</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="391"/>
-        <location filename="../main/MainWindow.cpp" line="1078"/>
-        <location filename="../main/MainWindow.cpp" line="1085"/>
+        <location filename="../main/MainWindow.cpp" line="421"/>
+        <location filename="../main/MainWindow.cpp" line="1216"/>
+        <location filename="../main/MainWindow.cpp" line="1223"/>
         <source>&amp;Layer</source>
         <translation>С&amp;лой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="461"/>
+        <location filename="../main/MainWindow.cpp" line="491"/>
         <source>&amp;File</source>
         <translation>&amp;Файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="463"/>
+        <location filename="../main/MainWindow.cpp" line="493"/>
         <source>File Toolbar</source>
         <translation>Панель файлов</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="470"/>
+        <location filename="../main/MainWindow.cpp" line="500"/>
         <source>&amp;New Session</source>
-        <translation>&amp;Создать сеанс</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="471"/>
+        <translation>&amp;Создать сессию</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="501"/>
         <source>Ctrl+N</source>
         <translation>Ctrl+N</translation>
     </message>
@@ -2082,7 +2173,7 @@
         <translation type="obsolete">&amp;Открыть сеанс...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="480"/>
+        <location filename="../main/MainWindow.cpp" line="510"/>
         <source>Ctrl+O</source>
         <translation>Ctrl+O</translation>
     </message>
@@ -2091,22 +2182,22 @@
         <translation type="obsolete">Открыть файл сохранённого ранее сеанса Sonic Visualiser</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="479"/>
+        <location filename="../main/MainWindow.cpp" line="509"/>
         <source>&amp;Open...</source>
         <translation>О&amp;ткрыть...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="481"/>
+        <location filename="../main/MainWindow.cpp" line="511"/>
         <source>Open a session file, audio file, or layer</source>
-        <translation>Открыть файл сеанса, звуковой файл или слой</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="519"/>
+        <translation>Открыть файл сессии, звуковой файл или слой</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="549"/>
         <source>&amp;Save Session</source>
-        <translation>Сохр&amp;анить сеанс</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="520"/>
+        <translation>Сохр&amp;анить сессию</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="550"/>
         <source>Ctrl+S</source>
         <translation>Ctrl+S</translation>
     </message>
@@ -2115,7 +2206,7 @@
         <translation type="obsolete">Сохранить в файл текущий сеанс Sonic Visualiser</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="529"/>
+        <location filename="../main/MainWindow.cpp" line="559"/>
         <source>Save Session &amp;As...</source>
         <translation>Сохранить сеанс &amp;как...</translation>
     </message>
@@ -2128,7 +2219,7 @@
         <translation type="obsolete">&amp;Импортировать звуковой файл...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="490"/>
+        <location filename="../main/MainWindow.cpp" line="520"/>
         <source>Ctrl+I</source>
         <translation>Ctrl+I</translation>
     </message>
@@ -2149,27 +2240,27 @@
         <translation type="obsolete">Импортировать ещё один звуковой файл в отдельный слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="554"/>
+        <location filename="../main/MainWindow.cpp" line="584"/>
         <source>&amp;Export Audio File...</source>
         <translation>Э&amp;кспортировать звуковой файл...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="555"/>
+        <location filename="../main/MainWindow.cpp" line="585"/>
         <source>Export selection as an audio file</source>
         <translation>Экспортировать выделенное в звуковой файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="568"/>
+        <location filename="../main/MainWindow.cpp" line="598"/>
         <source>Import Annotation &amp;Layer...</source>
         <translation>И&amp;мпортировать слой аннотаций...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="569"/>
+        <location filename="../main/MainWindow.cpp" line="599"/>
         <source>Ctrl+L</source>
         <translation>Ctrl+L</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="570"/>
+        <location filename="../main/MainWindow.cpp" line="600"/>
         <source>Import layer data from an existing file</source>
         <translation>Импортировать данные слоя из существующего файла</translation>
     </message>
@@ -2178,534 +2269,574 @@
         <translation type="vanished">Экспортировать слой аннотаций...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="578"/>
+        <location filename="../main/MainWindow.cpp" line="608"/>
         <source>Export layer data to a file</source>
         <translation>Экспортировать данные слоя в файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="630"/>
+        <location filename="../main/MainWindow.cpp" line="666"/>
         <source>&amp;Quit</source>
         <translation>В&amp;ыход</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="631"/>
+        <location filename="../main/MainWindow.cpp" line="667"/>
         <source>Ctrl+Q</source>
         <translation>Ctrl+Q</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="643"/>
+        <location filename="../main/MainWindow.cpp" line="679"/>
         <source>&amp;Edit</source>
         <translation>&amp;Правка</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="654"/>
+        <location filename="../main/MainWindow.cpp" line="690"/>
         <source>Cu&amp;t</source>
         <translation>&amp;Вырезать</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="655"/>
+        <location filename="../main/MainWindow.cpp" line="691"/>
         <source>Ctrl+X</source>
         <translation>Ctrl+X</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="664"/>
+        <location filename="../main/MainWindow.cpp" line="700"/>
         <source>&amp;Copy</source>
         <translation>С&amp;копировать</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="665"/>
+        <location filename="../main/MainWindow.cpp" line="701"/>
         <source>Ctrl+C</source>
         <translation>Ctrl+C</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="674"/>
+        <location filename="../main/MainWindow.cpp" line="710"/>
         <source>&amp;Paste</source>
         <translation>Вст&amp;авить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="675"/>
+        <location filename="../main/MainWindow.cpp" line="711"/>
         <source>Ctrl+V</source>
         <translation>Ctrl+V</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="692"/>
-        <location filename="../main/MainWindow.cpp" line="2342"/>
+        <location filename="../main/MainWindow.cpp" line="728"/>
+        <location filename="../main/MainWindow.cpp" line="2522"/>
         <source>&amp;Delete Selected Items</source>
         <translation>&amp;Удалить выбранное</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="693"/>
+        <location filename="../main/MainWindow.cpp" line="729"/>
         <source>Del</source>
         <translation>Del</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="706"/>
+        <location filename="../main/MainWindow.cpp" line="742"/>
         <source>Select &amp;All</source>
         <translation>В&amp;ыделить всё</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="707"/>
+        <location filename="../main/MainWindow.cpp" line="743"/>
         <source>Ctrl+A</source>
         <translation>Ctrl+A</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="715"/>
+        <location filename="../main/MainWindow.cpp" line="751"/>
         <source>Select &amp;Visible Range</source>
         <translation>Вы&amp;делить всё видимое</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="716"/>
+        <location filename="../main/MainWindow.cpp" line="752"/>
         <source>Ctrl+Shift+A</source>
         <translation>Ctrl+Shift+A</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="723"/>
+        <location filename="../main/MainWindow.cpp" line="759"/>
         <source>Select to &amp;Start</source>
         <translation>Выделить до &amp;начала</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="724"/>
-        <location filename="../main/MainWindow.cpp" line="2158"/>
-        <location filename="../main/MainWindow.cpp" line="2193"/>
-        <location filename="../main/MainWindow.cpp" line="2273"/>
+        <location filename="../main/MainWindow.cpp" line="760"/>
+        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2373"/>
+        <location filename="../main/MainWindow.cpp" line="2453"/>
         <source>Shift+Left</source>
         <translation>Shift+Left</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="731"/>
+        <location filename="../main/MainWindow.cpp" line="767"/>
         <source>Select to &amp;End</source>
         <translation>Выделить до &amp;конца</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="732"/>
+        <location filename="../main/MainWindow.cpp" line="768"/>
         <source>Shift+Right</source>
         <translation>Shift+Right</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="739"/>
+        <location filename="../main/MainWindow.cpp" line="775"/>
         <source>C&amp;lear Selection</source>
         <translation>Сн&amp;ять выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="740"/>
+        <location filename="../main/MainWindow.cpp" line="776"/>
         <source>Esc</source>
         <translation>Esc</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="752"/>
+        <location filename="../main/MainWindow.cpp" line="788"/>
         <source>&amp;Insert Instant at Playback Position</source>
         <translation>Вставить &amp;отметку в точку воспроизведения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="753"/>
+        <location filename="../main/MainWindow.cpp" line="802"/>
         <source>Enter</source>
         <translation>Enter</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="855"/>
+        <location filename="../main/MainWindow.cpp" line="932"/>
         <source>&amp;View</source>
         <translation>&amp;Вид</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="969"/>
+        <location filename="../main/MainWindow.cpp" line="1046"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="979"/>
+        <location filename="../main/MainWindow.cpp" line="1056"/>
         <source>9</source>
         <translation>9</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="989"/>
+        <location filename="../main/MainWindow.cpp" line="1066"/>
         <source>8</source>
         <translation>8</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="857"/>
+        <location filename="../main/MainWindow.cpp" line="934"/>
         <source>Scroll &amp;Left</source>
         <translation>Прокрутить в&amp;лево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="247"/>
+        <location filename="../main/MainWindow.cpp" line="248"/>
         <source>Playback Speed</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="472"/>
+        <translation>Скорость воспроизведения</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="502"/>
         <source>Abandon the current %1 session and start a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="498"/>
+        <location filename="../main/MainWindow.cpp" line="528"/>
         <source>Replace &amp;Main Audio...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="499"/>
+        <translation>&amp;Заменить основной аудиофайл…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="529"/>
         <source>Replace the main audio file of the session with a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="521"/>
+        <location filename="../main/MainWindow.cpp" line="551"/>
         <source>Save the current session into a %1 session file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="531"/>
+        <location filename="../main/MainWindow.cpp" line="561"/>
         <source>Save the current session into a new %1 session file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="560"/>
+        <location filename="../main/MainWindow.cpp" line="590"/>
         <source>Export Audio Data...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="576"/>
+        <translation>Экспортировать звуковые данные…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="606"/>
         <source>Export Annotation La&amp;yer...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="577"/>
+        <translation>Экспортировать слой &amp;аннотаций…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="607"/>
         <source>Ctrl+Y</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="594"/>
+        <translation>Ctrl+Y</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="622"/>
+        <source>Export SVG File...</source>
+        <translation>Экспортировать файл SVG…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="623"/>
+        <source>Export a single pane to a scalable SVG image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="630"/>
         <source>Browse Recorded Audio Folder</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="595"/>
+        <translation>Открыть папку с записанными аудиофайлами</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="631"/>
         <source>Open the Recorded Audio folder in the system file browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="632"/>
+        <location filename="../main/MainWindow.cpp" line="668"/>
         <source>Exit %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="775"/>
+        <translation>Завершить работу с %1</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="808"/>
+        <source>Shift+;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="826"/>
+        <source>Ctrl+Shift+;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="838"/>
         <source>Ctrl+Shift+Return</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="825"/>
+        <location filename="../main/MainWindow.cpp" line="888"/>
         <source>Reset Numbering Counters</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="826"/>
+        <translation>Сбросить счётчики нумерации</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="889"/>
         <source>Reset to 1 all the counters used for counter-based labelling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="858"/>
-        <location filename="../main/MainWindow.cpp" line="2155"/>
-        <location filename="../main/MainWindow.cpp" line="2181"/>
-        <location filename="../main/MainWindow.cpp" line="2211"/>
-        <location filename="../main/MainWindow.cpp" line="2232"/>
-        <location filename="../main/MainWindow.cpp" line="2250"/>
-        <location filename="../main/MainWindow.cpp" line="2267"/>
+        <location filename="../main/MainWindow.cpp" line="908"/>
+        <source>Subdivide Selected Instants...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="909"/>
+        <source>Add new instants at regular intervals between the selected instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="914"/>
+        <source>Winnow Selected Instants...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="915"/>
+        <source>Remove subdivisions, leaving only every Nth instant</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="935"/>
+        <location filename="../main/MainWindow.cpp" line="2335"/>
+        <location filename="../main/MainWindow.cpp" line="2361"/>
+        <location filename="../main/MainWindow.cpp" line="2391"/>
+        <location filename="../main/MainWindow.cpp" line="2412"/>
+        <location filename="../main/MainWindow.cpp" line="2430"/>
+        <location filename="../main/MainWindow.cpp" line="2447"/>
         <source>Left</source>
         <translation>Влево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="859"/>
+        <location filename="../main/MainWindow.cpp" line="936"/>
         <source>Scroll the current pane to the left</source>
         <translation>Прокрутить активное окно влево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="865"/>
+        <location filename="../main/MainWindow.cpp" line="942"/>
         <source>Scroll &amp;Right</source>
         <translation>Прокрутить в&amp;право</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="866"/>
+        <location filename="../main/MainWindow.cpp" line="943"/>
         <source>Right</source>
         <translation>Вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="867"/>
+        <location filename="../main/MainWindow.cpp" line="944"/>
         <source>Scroll the current pane to the right</source>
         <translation>Прокрутить активное окно вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="874"/>
-        <location filename="../main/MainWindow.cpp" line="2185"/>
-        <location filename="../main/MainWindow.cpp" line="2189"/>
+        <location filename="../main/MainWindow.cpp" line="951"/>
+        <location filename="../main/MainWindow.cpp" line="2365"/>
+        <location filename="../main/MainWindow.cpp" line="2369"/>
         <source>Ctrl+Left</source>
         <translation>Ctrl+Влево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="875"/>
+        <location filename="../main/MainWindow.cpp" line="952"/>
         <source>Scroll the current pane a big step to the left</source>
         <translation>Сделать большой шаг прокрутки влево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="882"/>
+        <location filename="../main/MainWindow.cpp" line="959"/>
         <source>Ctrl+Right</source>
         <translation>Ctrl+Вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="883"/>
+        <location filename="../main/MainWindow.cpp" line="960"/>
         <source>Scroll the current pane a big step to the right</source>
         <translation>Сделать большой шаг прокрутки вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="910"/>
+        <location filename="../main/MainWindow.cpp" line="987"/>
         <source>Zoom &amp;In</source>
         <translation>При&amp;близить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="911"/>
+        <location filename="../main/MainWindow.cpp" line="988"/>
         <source>Up</source>
         <translation>Вверх</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="912"/>
+        <location filename="../main/MainWindow.cpp" line="989"/>
         <source>Increase the zoom level</source>
         <translation>Увеличить масштаб отображения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="919"/>
+        <location filename="../main/MainWindow.cpp" line="996"/>
         <source>Zoom &amp;Out</source>
         <translation>&amp;Отдалить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="920"/>
+        <location filename="../main/MainWindow.cpp" line="997"/>
         <source>Down</source>
         <translation>Вниз</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="921"/>
+        <location filename="../main/MainWindow.cpp" line="998"/>
         <source>Decrease the zoom level</source>
         <translation>Уменьшить масштаб отображения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="927"/>
+        <location filename="../main/MainWindow.cpp" line="1004"/>
         <source>Restore &amp;Default Zoom</source>
         <translation>&amp;Восстановить обычный масштаб</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="934"/>
+        <location filename="../main/MainWindow.cpp" line="1011"/>
         <source>Zoom to &amp;Fit</source>
         <translation>&amp;Уместить в окне</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="936"/>
+        <location filename="../main/MainWindow.cpp" line="1013"/>
         <source>Zoom to show the whole file</source>
         <translation>Увидеть весь файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="946"/>
+        <location filename="../main/MainWindow.cpp" line="1023"/>
         <source>Show &amp;Centre Line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="947"/>
+        <translation>Показывать &amp;центральную линию</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1024"/>
         <source>&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="948"/>
+        <location filename="../main/MainWindow.cpp" line="1025"/>
         <source>Show or hide the centre line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="955"/>
+        <location filename="../main/MainWindow.cpp" line="1032"/>
         <source>Toggle All Time Rulers</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="970"/>
+        <translation>Переключить видимость всех линеек</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1047"/>
         <source>Hide times, layer names, and scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="980"/>
+        <location filename="../main/MainWindow.cpp" line="1057"/>
         <source>Show times and basic scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="990"/>
+        <location filename="../main/MainWindow.cpp" line="1067"/>
         <source>Show times, layer names, and scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1048"/>
+        <location filename="../main/MainWindow.cpp" line="1125"/>
         <source>Show &amp;Unit Converter</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1049"/>
+        <translation>Показать конвертер &amp;единиц</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1126"/>
         <source>Open a window of pitch and timing conversion utilities</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1055"/>
+        <location filename="../main/MainWindow.cpp" line="1135"/>
         <source>Go Full-Screen</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1056"/>
+        <translation>Полноэкранный режим</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1136"/>
         <source>F11</source>
-        <translation type="unfinished">F11</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1057"/>
+        <translation>F11</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1137"/>
         <source>Expand the pane area to the whole screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1070"/>
+        <location filename="../main/MainWindow.cpp" line="1208"/>
         <source>&amp;Pane</source>
         <translation>&amp;Окно</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1096"/>
+        <location filename="../main/MainWindow.cpp" line="1234"/>
         <source>Add &amp;New Pane</source>
         <translation>Добавить &amp;новое окно</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1098"/>
+        <location filename="../main/MainWindow.cpp" line="1236"/>
         <source>Add a new pane containing only a time ruler</source>
         <translation>Добавить новое окно, содержащее только линейку времени</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1124"/>
+        <location filename="../main/MainWindow.cpp" line="1260"/>
         <source>Add New %1 Layer</source>
         <translation>Добавить новый слой «%1»</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1125"/>
+        <location filename="../main/MainWindow.cpp" line="1261"/>
         <source>Add a new empty layer of type %1</source>
         <translation>Добавить новый пустой слой типа «%1»</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1186"/>
+        <location filename="../main/MainWindow.cpp" line="1326"/>
         <source>Add &amp;Waveform</source>
         <translation>Добавить &amp;волновую форму</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1189"/>
+        <location filename="../main/MainWindow.cpp" line="1328"/>
         <source>Add a new pane showing a waveform view</source>
         <translation>Добавить новое окно с видом волновой формы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1192"/>
+        <location filename="../main/MainWindow.cpp" line="1330"/>
         <source>Add a new layer showing a waveform view</source>
         <translation>Добавить новый слой с видом волновой формы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1211"/>
+        <location filename="../main/MainWindow.cpp" line="1347"/>
         <source>Add &amp;Melodic Range Spectrogram</source>
         <translation>Добавить спектограмму &amp;мелодического диапазона</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1226"/>
+        <location filename="../main/MainWindow.cpp" line="1359"/>
         <source>Add a new pane showing a spectrogram set up for tracking frequencies</source>
         <translation>Добавить новое окно, отображающее спектрограмму для отслеживания частот</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1229"/>
+        <location filename="../main/MainWindow.cpp" line="1361"/>
         <source>Add a new layer showing a spectrogram set up for tracking frequencies</source>
         <translation>Добавить новый слой, отображающий спектрограмму для отслеживания частот</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1311"/>
+        <location filename="../main/MainWindow.cpp" line="1441"/>
         <source>&amp;All Channels Mixed</source>
         <translation>Все &amp;каналы сведены</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1313"/>
+        <location filename="../main/MainWindow.cpp" line="1443"/>
         <source>&amp;All Channels</source>
         <translation>&amp;Все каналы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1316"/>
+        <location filename="../main/MainWindow.cpp" line="1446"/>
         <source>Channel &amp;%1</source>
         <translation>Канал &amp;%1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1397"/>
+        <location filename="../main/MainWindow.cpp" line="1527"/>
         <source>&amp;Delete Pane</source>
         <translation>У&amp;далить окно</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1407"/>
+        <location filename="../main/MainWindow.cpp" line="1537"/>
         <source>Add &amp;Time Ruler</source>
         <translation>Добавить линейку &amp;времени</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1408"/>
+        <location filename="../main/MainWindow.cpp" line="1538"/>
         <source>Add a new layer showing a time ruler</source>
         <translation>Добавить новый слой с линейкой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1416"/>
+        <location filename="../main/MainWindow.cpp" line="1546"/>
         <source>Add &amp;Existing Layer</source>
         <translation>Добавить &amp;существующий слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1428"/>
+        <location filename="../main/MainWindow.cpp" line="1558"/>
         <source>Switch to Previous Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1429"/>
+        <translation>Переключиться на предыдущий слой</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1559"/>
         <source>{</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1430"/>
+        <translation>{</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1560"/>
         <source>Make the previous layer in the pane current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1436"/>
+        <location filename="../main/MainWindow.cpp" line="1566"/>
         <source>Switch to Next Layer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1437"/>
+        <translation>Переключиться на следующий слой</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1567"/>
         <source>}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1438"/>
+        <translation>}</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1568"/>
         <source>Make the next layer in the pane current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1447"/>
+        <location filename="../main/MainWindow.cpp" line="1577"/>
         <source>&amp;Rename Layer...</source>
         <translation>&amp;Переименовать слой...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1449"/>
+        <location filename="../main/MainWindow.cpp" line="1579"/>
         <source>Rename the currently active layer</source>
         <translation>Переименовать активный слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1463"/>
+        <location filename="../main/MainWindow.cpp" line="1593"/>
         <source>&amp;Delete Layer</source>
         <translation>&amp;Удалить слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1465"/>
+        <location filename="../main/MainWindow.cpp" line="1595"/>
         <source>Delete the currently active layer</source>
         <translation>Удалить активный слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1723"/>
+        <location filename="../main/MainWindow.cpp" line="1888"/>
         <source>&amp;Help</source>
         <translation>&amp;Справка</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1733"/>
+        <location filename="../main/MainWindow.cpp" line="1898"/>
         <source>&amp;Help Reference</source>
         <translation>&amp;Руководство пользователя</translation>
     </message>
@@ -2730,224 +2861,226 @@
         <translation type="obsolete">Показать информацию о Sonic Visualiser</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1949"/>
+        <location filename="../main/MainWindow.cpp" line="2122"/>
         <source>Rewind to Start</source>
         <translation>Перемотать в начало</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1950"/>
+        <location filename="../main/MainWindow.cpp" line="2123"/>
         <source>Home</source>
         <translation>Домой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1951"/>
+        <location filename="../main/MainWindow.cpp" line="2124"/>
         <source>Rewind to the start</source>
         <translation>Перемотать в начало</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1955"/>
-        <location filename="../main/MainWindow.cpp" line="2360"/>
-        <location filename="../main/MainWindow.cpp" line="2361"/>
+        <location filename="../main/MainWindow.cpp" line="2128"/>
+        <location filename="../main/MainWindow.cpp" line="2540"/>
+        <location filename="../main/MainWindow.cpp" line="2541"/>
         <source>Rewind</source>
         <translation>Перемотать назад</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2351"/>
+        <location filename="../main/MainWindow.cpp" line="2531"/>
         <source>Rewind to the previous time instant in the current layer</source>
         <translation>Перемотать до предыдущей отметки времени в текущем слое</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1968"/>
+        <location filename="../main/MainWindow.cpp" line="2141"/>
         <source>Play / Pause</source>
         <translation>Воспроизвести / Приостановить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1970"/>
+        <location filename="../main/MainWindow.cpp" line="2149"/>
         <source>Space</source>
-        <translation>Пробел</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1971"/>
+        <extracomment>This text is a shortcut label referring to the space-bar on the keyboard. It probably should not be translated, and certainly should not be translated as if referring to an empty void or to the extra-terrestrial universe.</extracomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2151"/>
         <source>Start or stop playback from the current position</source>
         <translation>Запустить или остановить воспроизведение с текущей позиции</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1980"/>
-        <location filename="../main/MainWindow.cpp" line="2358"/>
+        <location filename="../main/MainWindow.cpp" line="2160"/>
+        <location filename="../main/MainWindow.cpp" line="2538"/>
         <source>Fast Forward</source>
         <translation>Перемотать вперёд</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2349"/>
+        <location filename="../main/MainWindow.cpp" line="2529"/>
         <source>Fast forward to the next time instant in the current layer</source>
         <translation>Перемотать до следующей отметки времени в текущем слое</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1993"/>
+        <location filename="../main/MainWindow.cpp" line="2173"/>
         <source>Fast Forward to End</source>
         <translation>Перемотать до конца</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1742"/>
+        <location filename="../main/MainWindow.cpp" line="1907"/>
         <source>Open a window showing the keystrokes you can use in %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1747"/>
+        <location filename="../main/MainWindow.cpp" line="1912"/>
         <source>%1 on the &amp;Web</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1748"/>
+        <translation>%1 в &amp;Интернете</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1913"/>
         <source>Open the %1 website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1752"/>
+        <location filename="../main/MainWindow.cpp" line="1922"/>
         <source>&amp;About %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1753"/>
+        <translation>&amp;О %1</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1923"/>
         <source>Show information about %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1994"/>
+        <translation>Показать информацию о %1</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2174"/>
         <source>End</source>
         <translation>Конец</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1995"/>
+        <location filename="../main/MainWindow.cpp" line="2175"/>
         <source>Fast-forward to the end</source>
         <translation>Перемотать до конца</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2010"/>
+        <location filename="../main/MainWindow.cpp" line="2190"/>
         <source>Play Mode Toolbar</source>
         <translation>Панель режима воспроизведения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2013"/>
+        <location filename="../main/MainWindow.cpp" line="2193"/>
         <source>Constrain Playback to Selection</source>
         <translation>Ограничить воспроизведение выделением</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2016"/>
+        <location filename="../main/MainWindow.cpp" line="2196"/>
         <source>s</source>
         <translation>с</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2024"/>
+        <location filename="../main/MainWindow.cpp" line="2204"/>
         <source>Loop Playback</source>
         <translation>Воспроизведение в цикле</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2027"/>
+        <location filename="../main/MainWindow.cpp" line="2207"/>
         <source>l</source>
         <translation>l</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2028"/>
+        <location filename="../main/MainWindow.cpp" line="2208"/>
         <source>Loop playback</source>
         <translation>Воспроизведение в цикле</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2133"/>
+        <location filename="../main/MainWindow.cpp" line="2313"/>
         <source>Edit Toolbar</source>
         <translation>Панель правки</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2136"/>
+        <location filename="../main/MainWindow.cpp" line="2316"/>
         <source>Tools Toolbar</source>
         <translation>Панель инструментов</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2141"/>
-        <location filename="../main/MainWindow.cpp" line="2145"/>
-        <location filename="../main/MainWindow.cpp" line="2155"/>
+        <location filename="../main/MainWindow.cpp" line="2321"/>
+        <location filename="../main/MainWindow.cpp" line="2325"/>
+        <location filename="../main/MainWindow.cpp" line="2335"/>
         <source>Navigate</source>
         <translation>Перемещение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2144"/>
+        <location filename="../main/MainWindow.cpp" line="2324"/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2169"/>
-        <location filename="../main/MainWindow.cpp" line="2181"/>
+        <location filename="../main/MainWindow.cpp" line="2349"/>
+        <location filename="../main/MainWindow.cpp" line="2361"/>
         <source>Select</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2171"/>
+        <location filename="../main/MainWindow.cpp" line="2351"/>
         <source>2</source>
         <translation>2</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2164"/>
-        <location filename="../main/MainWindow.cpp" line="2198"/>
-        <location filename="../main/MainWindow.cpp" line="2214"/>
+        <location filename="../main/MainWindow.cpp" line="2344"/>
+        <location filename="../main/MainWindow.cpp" line="2378"/>
+        <location filename="../main/MainWindow.cpp" line="2394"/>
         <source>Edit</source>
         <translation>Правка</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2200"/>
+        <location filename="../main/MainWindow.cpp" line="2380"/>
         <source>3</source>
         <translation>3</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2219"/>
-        <location filename="../main/MainWindow.cpp" line="2232"/>
+        <location filename="../main/MainWindow.cpp" line="2399"/>
+        <location filename="../main/MainWindow.cpp" line="2412"/>
         <source>Draw</source>
         <translation>Рисование</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2221"/>
+        <location filename="../main/MainWindow.cpp" line="2401"/>
         <source>4</source>
         <translation>4</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2370"/>
+        <location filename="../main/MainWindow.cpp" line="2550"/>
         <source>No audio file loaded.</source>
         <translation>Ни один звуковой файл не загружен.</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2381"/>
+        <location filename="../main/MainWindow.cpp" line="2563"/>
         <source>%1Hz (resampling to %2Hz)</source>
         <translation>%1 Гц (ресэмплирование до %2 Гц)</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2452"/>
-        <location filename="../main/MainWindow.cpp" line="2466"/>
-        <location filename="../main/MainWindow.cpp" line="2480"/>
-        <location filename="../main/MainWindow.cpp" line="2717"/>
-        <location filename="../main/MainWindow.cpp" line="2722"/>
-        <location filename="../main/MainWindow.cpp" line="3031"/>
-        <location filename="../main/MainWindow.cpp" line="3035"/>
+        <location filename="../main/MainWindow.cpp" line="2634"/>
+        <location filename="../main/MainWindow.cpp" line="2648"/>
+        <location filename="../main/MainWindow.cpp" line="2662"/>
+        <location filename="../main/MainWindow.cpp" line="2907"/>
+        <location filename="../main/MainWindow.cpp" line="2912"/>
+        <location filename="../main/MainWindow.cpp" line="3287"/>
+        <location filename="../main/MainWindow.cpp" line="3291"/>
         <source>Failed to open file</source>
         <translation>Не удалось открыть файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2583"/>
+        <location filename="../main/MainWindow.cpp" line="2765"/>
         <source>Export the selected region only</source>
         <translation>Экспортировать только выделенную область</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2584"/>
+        <location filename="../main/MainWindow.cpp" line="2766"/>
         <source>Export the whole audio file</source>
         <translation>Экспортировать весь звуковой файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2588"/>
-        <location filename="../main/MainWindow.cpp" line="2606"/>
-        <location filename="../main/MainWindow.cpp" line="2872"/>
+        <location filename="../main/MainWindow.cpp" line="2770"/>
+        <location filename="../main/MainWindow.cpp" line="2788"/>
+        <location filename="../main/MainWindow.cpp" line="3060"/>
+        <location filename="../main/MainWindow.cpp" line="3134"/>
         <source>Select region to export</source>
         <translation>Выделите область для экспорта</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2589"/>
+        <location filename="../main/MainWindow.cpp" line="2771"/>
         <source>Which region from the original audio file do you want to export?</source>
         <translation>Какую область исходного звукового файла вы хотите экспортировать?</translation>
     </message>
@@ -2956,30 +3089,30 @@
         <translation type="obsolete">Экспортировать выделенные области в один звуковой файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2602"/>
+        <location filename="../main/MainWindow.cpp" line="2784"/>
         <source>Export the selected regions into separate files</source>
         <translation>Экспортировать выделенные области в разные звуковые файлы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2607"/>
+        <location filename="../main/MainWindow.cpp" line="2789"/>
         <source>Multiple regions of the original audio file are selected.
 What do you want to export?</source>
         <translation>Выбрано несколько областей исходного звукового файла.
 Какую из них вы хотите экспортировать?</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2638"/>
+        <location filename="../main/MainWindow.cpp" line="2820"/>
         <source>Fragment file %1 already exists, aborting</source>
         <translation>Файл фрагмента %1 уже существует, прерывание</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2688"/>
-        <location filename="../main/MainWindow.cpp" line="2816"/>
+        <location filename="../main/MainWindow.cpp" line="2878"/>
+        <location filename="../main/MainWindow.cpp" line="3006"/>
         <source>Failed to write file</source>
         <translation>Не удалось записать файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2758"/>
+        <location filename="../main/MainWindow.cpp" line="2948"/>
         <source>Failed to open file %1 for writing</source>
         <translation>Не удалось открыть файл %1 для записи</translation>
     </message>
@@ -2988,100 +3121,99 @@
         <translation type="obsolete">Sonic Visualiser: %1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3359"/>
+        <location filename="../main/MainWindow.cpp" line="3622"/>
         <source>Session modified</source>
-        <translation>Сеанс изменен</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3421"/>
-        <location filename="../main/MainWindow.cpp" line="3444"/>
+        <translation>Сессия изменена</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3684"/>
+        <location filename="../main/MainWindow.cpp" line="3707"/>
         <source>Failed to save file</source>
         <translation>Не удалось сохранить файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3837"/>
+        <location filename="../main/MainWindow.cpp" line="4142"/>
         <source>Rename Layer</source>
         <translation>Переименовать слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3838"/>
+        <location filename="../main/MainWindow.cpp" line="4143"/>
         <source>New name for this layer:</source>
         <translation>Новое имя этого слоя:</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4116"/>
+        <location filename="../main/MainWindow.cpp" line="4425"/>
         <source>Sample rate mismatch</source>
         <translation>Несоответствие частоты дискретизации</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4409"/>
-        <location filename="../main/MainWindow.cpp" line="4416"/>
+        <location filename="../main/MainWindow.cpp" line="4801"/>
+        <location filename="../main/MainWindow.cpp" line="4808"/>
         <source>Failed to regenerate layer</source>
         <translation>Не удалось повторно создать слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4537"/>
+        <location filename="../main/MainWindow.cpp" line="4932"/>
         <source>http://www.sonicvisualiser.org/</source>
         <translation>http://www.sonicvisualiser.org/</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4557"/>
+        <location filename="../main/MainWindow.cpp" line="5007"/>
         <source>Release %1 : Revision %2</source>
         <translation>Версия %1 : Редакция %2</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4559"/>
+        <location filename="../main/MainWindow.cpp" line="5009"/>
         <source>Release %1</source>
         <translation>Версия %1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4563"/>
+        <location filename="../main/MainWindow.cpp" line="5013"/>
         <source>Unreleased : Revision %1</source>
         <translation>Не выпущено : редакция %1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4569"/>
+        <location filename="../main/MainWindow.cpp" line="5028"/>
         <source>&lt;h3&gt;About Sonic Visualiser&lt;/h3&gt;</source>
         <translation>&lt;h3&gt;О программе Sonic Visualiser&lt;/h3&gt;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4573"/>
+        <location filename="../main/MainWindow.cpp" line="5019"/>
         <source>Debug</source>
         <translation>Отладка</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4573"/>
+        <location filename="../main/MainWindow.cpp" line="5019"/>
         <source>Release</source>
         <translation>Версия</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4598"/>
+        <location filename="../main/MainWindow.cpp" line="5061"/>
         <source>&lt;br&gt;With Ogg file decoder (oggz v%1, fishsound v%2) &amp;copy; CSIRO Australia</source>
         <translation>&lt;br&gt;С декодером Ogg (oggz v%1, fishsound v%2) &amp;copy; CSIRO Australia</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4641"/>
+        <location filename="../main/MainWindow.cpp" line="5103"/>
         <source>&lt;br&gt;With LADSPA plugin support (API v%1) &amp;copy; Richard Furse, Paul Davis, Stefan Westerfeld</source>
-        <translation>&lt;br&gt;С поддержкой расширений LADSPA (API v%1) &amp;copy; Richard Furse, Paul Davis, Stefan Westerfeld</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4642"/>
+        <translation>&lt;br&gt;С поддержкой плагинов LADSPA (API v%1) &amp;copy; Richard Furse, Paul Davis, Stefan Westerfeld</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5104"/>
         <source>&lt;br&gt;With DSSI plugin support (API v%1) &amp;copy; Chris Cannam, Steve Harris, Sean Bolton</source>
-        <translation>&lt;br&gt;С поддержкой расширений DSSI (API v%1) &amp;copy; Chris Cannam, Steve Harris, Sean Bolton</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4680"/>
+        <translation>&lt;br&gt;С поддержкой плагинов DSSI (API v%1) &amp;copy; Chris Cannam, Steve Harris, Sean Bolton</translation>
+    </message>
+    <message>
         <source>About Sonic Visualiser</source>
-        <translation>О программе Sonic Visualiser</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4376"/>
-        <location filename="../main/MainWindow.cpp" line="4383"/>
+        <translation type="vanished">О программе Sonic Visualiser</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4768"/>
+        <location filename="../main/MainWindow.cpp" line="4775"/>
         <source>Failed to generate layer</source>
         <translation>Не удалось создать слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="624"/>
+        <location filename="../main/MainWindow.cpp" line="660"/>
         <source>Adjust the application preferences</source>
         <translation>Изменить параметры работы приложения</translation>
     </message>
@@ -3090,75 +3222,75 @@
         <translation type="obsolete">Н&amp;едавние файлы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="623"/>
+        <location filename="../main/MainWindow.cpp" line="659"/>
         <source>&amp;Preferences...</source>
         <translation>&amp;Параметры...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="761"/>
+        <location filename="../main/MainWindow.cpp" line="789"/>
         <source>;</source>
         <translation>;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1000"/>
+        <location filename="../main/MainWindow.cpp" line="1077"/>
         <source>Show &amp;Zoom Wheels</source>
         <translation>Показывать &amp;колёса масштабирования</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1001"/>
+        <location filename="../main/MainWindow.cpp" line="1078"/>
         <source>Z</source>
         <translation>Z</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1002"/>
+        <location filename="../main/MainWindow.cpp" line="1079"/>
         <source>Show thumbwheels for zooming horizontally and vertically</source>
         <translation>Показывать колёса для масштабирования по горизонтали и вертикали</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1521"/>
+        <location filename="../main/MainWindow.cpp" line="1686"/>
         <source>%1 by Category</source>
         <translation>%1 по категории</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1536"/>
-        <location filename="../main/MainWindow.cpp" line="1624"/>
+        <location filename="../main/MainWindow.cpp" line="1701"/>
+        <location filename="../main/MainWindow.cpp" line="1789"/>
         <source>Unclassified</source>
         <translation>Неклассифицированные</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1575"/>
+        <location filename="../main/MainWindow.cpp" line="1740"/>
         <source>%1 by Maker</source>
         <translation>%1 по имени создателя</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1589"/>
-        <location filename="../main/MainWindow.cpp" line="1627"/>
+        <location filename="../main/MainWindow.cpp" line="1754"/>
+        <location filename="../main/MainWindow.cpp" line="1792"/>
         <source>Unknown</source>
         <translation>Неизвестен</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1567"/>
+        <location filename="../main/MainWindow.cpp" line="1732"/>
         <source>%1 by Plugin Name</source>
-        <translation>%1 по названию расширения</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1643"/>
-        <location filename="../main/MainWindow.cpp" line="1669"/>
+        <translation>%1 по названию плагина</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1808"/>
+        <location filename="../main/MainWindow.cpp" line="1834"/>
         <source>%1...</source>
         <translation>%1...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1235"/>
+        <location filename="../main/MainWindow.cpp" line="1367"/>
         <source>Add Spectr&amp;um</source>
         <translation>Добавить &amp;график спектральной функции</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1238"/>
+        <location filename="../main/MainWindow.cpp" line="1369"/>
         <source>Add a new pane showing a frequency spectrum</source>
         <translation>Добавить новое окно с частотой спектра</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1241"/>
+        <location filename="../main/MainWindow.cpp" line="1371"/>
         <source>Add a new layer showing a frequency spectrum</source>
         <translation>Добавить новый слой с частотой спектра</translation>
     </message>
@@ -3167,51 +3299,51 @@
         <translation type="vanished">Ускорение воспроизведения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="380"/>
-        <location filename="../main/MainWindow.cpp" line="1486"/>
+        <location filename="../main/MainWindow.cpp" line="410"/>
+        <location filename="../main/MainWindow.cpp" line="1646"/>
         <source>&amp;Transform</source>
         <translation>Пр&amp;еобразования</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1320"/>
-        <location filename="../main/MainWindow.cpp" line="3447"/>
+        <location filename="../main/MainWindow.cpp" line="1450"/>
+        <location filename="../main/MainWindow.cpp" line="3710"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1504"/>
+        <location filename="../main/MainWindow.cpp" line="1669"/>
         <source>&amp;Recent Transforms</source>
         <translation>&amp;Недавние преобразования</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1590"/>
-        <location filename="../main/MainWindow.cpp" line="1628"/>
+        <location filename="../main/MainWindow.cpp" line="1755"/>
+        <location filename="../main/MainWindow.cpp" line="1793"/>
         <source> [\(&lt;].*$</source>
         <translation> [\(&lt;].*$</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4128"/>
-        <location filename="../main/MainWindow.cpp" line="4138"/>
+        <location filename="../main/MainWindow.cpp" line="4437"/>
+        <location filename="../main/MainWindow.cpp" line="4447"/>
         <source>Audio processing overload</source>
         <translation>Перегрузка в обработке звука</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1009"/>
+        <location filename="../main/MainWindow.cpp" line="1086"/>
         <source>Show Property Bo&amp;xes</source>
         <translation>Показывать панели с&amp;войств</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1010"/>
+        <location filename="../main/MainWindow.cpp" line="1087"/>
         <source>X</source>
         <translation>X</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1011"/>
+        <location filename="../main/MainWindow.cpp" line="1088"/>
         <source>Show the layer property boxes at the side of the main window</source>
         <translation>Показывать панели свойств слоёв сбоку от основного окна</translation>
     </message>
     <message>
-        <location filename="../main/OSCHandler.cpp" line="319"/>
+        <location filename="../main/OSCHandler.cpp" line="337"/>
         <source>Add %1 Pane</source>
         <translation>Добавить окно %1</translation>
     </message>
@@ -3220,17 +3352,17 @@
         <translation type="obsolete">Отказаться от текущего сеанса Sonic Visualiser и начать новый</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="503"/>
+        <location filename="../main/MainWindow.cpp" line="533"/>
         <source>Open Lo&amp;cation...</source>
         <translation>Открыть &amp;местоположение...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="504"/>
+        <location filename="../main/MainWindow.cpp" line="534"/>
         <source>Ctrl+Shift+O</source>
         <translation>Ctrl+Shift+O</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="505"/>
+        <location filename="../main/MainWindow.cpp" line="535"/>
         <source>Open or import a file from a remote URL</source>
         <translation>Открыть или импортировать файл с удалённого узла</translation>
     </message>
@@ -3239,77 +3371,77 @@
         <translation type="obsolete">Завершить работу с Sonic Visualiser</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="656"/>
+        <location filename="../main/MainWindow.cpp" line="692"/>
         <source>Cut the selection from the current layer to the clipboard</source>
         <translation>Вырезать выделение из активного слоя в буфер обмена</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="666"/>
+        <location filename="../main/MainWindow.cpp" line="702"/>
         <source>Copy the selection from the current layer to the clipboard</source>
         <translation>Скопировать выделение из активного слоя в буфер обмена</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="676"/>
+        <location filename="../main/MainWindow.cpp" line="712"/>
         <source>Paste from the clipboard to the current layer</source>
         <translation>Вставить содержимое буфера обмена в активный слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="708"/>
+        <location filename="../main/MainWindow.cpp" line="744"/>
         <source>Select the whole duration of the current session</source>
         <translation>Выбрать данные по всей длительности активнонр сеанса</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="717"/>
+        <location filename="../main/MainWindow.cpp" line="753"/>
         <source>Select the time range corresponding to the current window width</source>
         <translation>Сделать временной диапазон равным активной ширине окна</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="725"/>
+        <location filename="../main/MainWindow.cpp" line="761"/>
         <source>Select from the start of the session to the current playback position</source>
-        <translation>Выделить от начала сеанса до текущей точки воспроизведения</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="733"/>
+        <translation>Выделить от начала сессии до текущей точки воспроизведения</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="769"/>
         <source>Select from the current playback position to the end of the session</source>
-        <translation>Выделить от текущей точки воспроизведения до конца сеанса</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="741"/>
+        <translation>Выделить от текущей точки воспроизведения до конца сессии</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="777"/>
         <source>Clear the selection</source>
         <translation>Очистить выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="754"/>
+        <location filename="../main/MainWindow.cpp" line="790"/>
         <source>Insert a new time instant at the current playback position, in a new layer if necessary</source>
         <translation>Вставить новую отметку времени в точку воспроизведения, при необходимости — в новый слой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="766"/>
+        <location filename="../main/MainWindow.cpp" line="807"/>
         <source>Insert Instants at Selection &amp;Boundaries</source>
         <translation>Вставить отметки времени по &amp;краям выделения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="767"/>
+        <location filename="../main/MainWindow.cpp" line="815"/>
         <source>Shift+Enter</source>
         <translation>Shift+Enter</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="873"/>
+        <location filename="../main/MainWindow.cpp" line="950"/>
         <source>&amp;Jump Left</source>
         <translation>Перескочить в&amp;лево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="881"/>
+        <location filename="../main/MainWindow.cpp" line="958"/>
         <source>J&amp;ump Right</source>
         <translation>П&amp;ерескочить вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="928"/>
+        <location filename="../main/MainWindow.cpp" line="1005"/>
         <source>Restore the zoom level to the default</source>
         <translation>Восстановить обычный масштаб отображения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="968"/>
+        <location filename="../main/MainWindow.cpp" line="1045"/>
         <source>Show &amp;No Overlays</source>
         <translation>Не по&amp;казывать перекрытия совсем</translation>
     </message>
@@ -3318,7 +3450,7 @@
         <translation type="obsolete">Спрятать индикацию центра, времён выделения, имена слоёв и масштаб</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="978"/>
+        <location filename="../main/MainWindow.cpp" line="1055"/>
         <source>Show &amp;Minimal Overlays</source>
         <translation>Показывать &amp;минимум перекрытий</translation>
     </message>
@@ -3335,7 +3467,7 @@
         <translation type="obsolete">Показывать индикатор центра, времена выделений, имена слоёв и масштаб</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="988"/>
+        <location filename="../main/MainWindow.cpp" line="1065"/>
         <source>Show &amp;All Overlays</source>
         <translation>Показывать в&amp;се перекрытия</translation>
     </message>
@@ -3348,600 +3480,602 @@
         <translation type="obsolete">Показывать весь текст и масштаб</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1018"/>
+        <location filename="../main/MainWindow.cpp" line="1095"/>
         <source>Show Status &amp;Bar</source>
         <translation>Показывать статусную &amp;строку</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1019"/>
+        <location filename="../main/MainWindow.cpp" line="1096"/>
         <source>Show context help information in the status bar at the bottom of the window</source>
         <translation>Показывать контекстную справку в статусной строке, находящейся внизу окна программы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1202"/>
+        <location filename="../main/MainWindow.cpp" line="1339"/>
         <source>Add a new pane showing a spectrogram</source>
         <translation>Добавить новое окно с отображением спектрограммы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1205"/>
+        <location filename="../main/MainWindow.cpp" line="1341"/>
         <source>Add a new layer showing a spectrogram</source>
         <translation>Добавить новый слой с отображением спектрограммы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1214"/>
+        <location filename="../main/MainWindow.cpp" line="1349"/>
         <source>Add a new pane showing a spectrogram set up for an overview of note pitches</source>
         <translation>Добавить новое окно, отображающее спектрограмму для обзора высоты тона нот</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1217"/>
+        <location filename="../main/MainWindow.cpp" line="1351"/>
         <source>Add a new layer showing a spectrogram set up for an overview of note pitches</source>
         <translation>Добавить новый слой, отображающий спектрограмму для обзора высоты тона нот</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1399"/>
+        <location filename="../main/MainWindow.cpp" line="1529"/>
         <source>Delete the currently active pane</source>
         <translation>Удалить активное окно</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1420"/>
+        <location filename="../main/MainWindow.cpp" line="1550"/>
         <source>Add S&amp;lice of Layer</source>
         <translation>Добавить &amp;фрагмент слоя</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2172"/>
+        <location filename="../main/MainWindow.cpp" line="1917"/>
+        <source>What&apos;s &amp;New?</source>
+        <translation>&amp;Что нового?</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1918"/>
+        <source>Show changes in this release of %1</source>
+        <translation>Показать изменения в этой версии %1</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2352"/>
         <source>Select ranges</source>
         <translation>Выбрать диапазон</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2201"/>
+        <location filename="../main/MainWindow.cpp" line="2381"/>
         <source>Edit items in layer</source>
         <translation>Изменить объекты слоя</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2222"/>
+        <location filename="../main/MainWindow.cpp" line="2402"/>
         <source>Draw new items in layer</source>
         <translation>Нарисовать новые объекты в слое</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3049"/>
+        <location filename="../main/MainWindow.cpp" line="3305"/>
         <source>Open Location</source>
         <translation>Открыть местоположение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3050"/>
+        <location filename="../main/MainWindow.cpp" line="3306"/>
         <source>Please enter the URL of the location to open:</source>
         <translation>Введите URL открываемого местоположения:</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3063"/>
-        <location filename="../main/MainWindow.cpp" line="3067"/>
-        <location filename="../main/MainWindow.cpp" line="3091"/>
-        <location filename="../main/MainWindow.cpp" line="3095"/>
+        <location filename="../main/MainWindow.cpp" line="3319"/>
+        <location filename="../main/MainWindow.cpp" line="3323"/>
+        <location filename="../main/MainWindow.cpp" line="3352"/>
+        <location filename="../main/MainWindow.cpp" line="3356"/>
         <source>Failed to open location</source>
         <translation>Не удалось открыть местоположение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3788"/>
+        <location filename="../main/MainWindow.cpp" line="4077"/>
         <source>Multiplex all of the above</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3937"/>
+        <location filename="../main/MainWindow.cpp" line="4242"/>
         <source>Playback speed: %1% (%2x slower)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3943"/>
+        <translation>Скорость воспроизведения: %1% (в %2 раза медленнее)</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4248"/>
         <source>Playback speed: %1% (%2x faster)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4065"/>
+        <translation>Скорость воспроизведения: %1% (в %2 раза быстрее)</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4375"/>
         <source>Visible: %1 to %2 (duration %3)</source>
         <translation>Видимая область: от %1 до %2 (длительность %3)</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4146"/>
+        <location filename="../main/MainWindow.cpp" line="4478"/>
         <source>Problems loading plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4377"/>
+        <location filename="../main/MainWindow.cpp" line="4769"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate derived layer.&lt;p&gt;The layer transform %1failed:&lt;p&gt;%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4384"/>
+        <location filename="../main/MainWindow.cpp" line="4776"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to generate a derived layer.&lt;p&gt;The layer transform %1failed.&lt;p&gt;No error information is available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4522"/>
         <source>Adjust the master playback level</source>
-        <translation>Изменить общую громкость воспроизведения</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4524"/>
+        <translation type="vanished">Изменить общую громкость воспроизведения</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4919"/>
         <source>Adjust the master playback speed</source>
         <translation>Изменить общую скорость воспроизведения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4600"/>
+        <location filename="../main/MainWindow.cpp" line="5063"/>
         <source>&lt;br&gt;With Ogg file decoder &amp;copy; CSIRO Australia</source>
         <translation>&lt;br&gt;С декодером Ogg &amp;copy; CSIRO Australia</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4607"/>
+        <location filename="../main/MainWindow.cpp" line="5070"/>
         <source>&lt;br&gt;With MAD mp3 decoder &amp;copy; Underbit Technologies Inc</source>
         <translation>&lt;br&gt;С декодером MAD mp3 &amp;copy; Underbit Technologies Inc</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4614"/>
+        <location filename="../main/MainWindow.cpp" line="5077"/>
         <source>&lt;br&gt;With libsamplerate &amp;copy; Erik de Castro Lopo</source>
         <translation>&lt;br&gt;С libsamplerate &amp;copy; Erik de Castro Lopo</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4621"/>
+        <location filename="../main/MainWindow.cpp" line="5084"/>
         <source>&lt;br&gt;With libsndfile &amp;copy; Erik de Castro Lopo</source>
         <translation>&lt;br&gt;С libsndfile &amp;copy; Erik de Castro Lopo</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4628"/>
+        <location filename="../main/MainWindow.cpp" line="5091"/>
         <source>&lt;br&gt;With FFTW3 &amp;copy; Matteo Frigo and MIT</source>
         <translation>&lt;br&gt;С FFTW3 &amp;copy; Matteo Frigo и MIT</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4639"/>
         <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;С поддержкой расширений Vamp (API v%1, host SDK v%2) &amp;copy; Chris Cannam</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4648"/>
+        <translation type="vanished">&lt;br&gt;С поддержкой расширений Vamp (API v%1, host SDK v%2) &amp;copy; Chris Cannam</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5110"/>
         <source>&lt;br&gt;With Serd and Sord RDF parser and store &amp;copy; David Robillard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4649"/>
-        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Chris Cannam</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4657"/>
+        <location filename="../main/MainWindow.cpp" line="5119"/>
         <source>&lt;br&gt;With liblo Lite OSC library &amp;copy; Steve Harris</source>
         <translation>&lt;br&gt;С liblo Lite OSC library &amp;copy; Steve Harris</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="586"/>
+        <location filename="../main/MainWindow.cpp" line="616"/>
         <source>Export Image File...</source>
         <translation>Экспортировать в файл изображения...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="587"/>
+        <location filename="../main/MainWindow.cpp" line="617"/>
         <source>Export a single pane to an image file</source>
         <translation>Экспортировать всё окно в файл изображения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2854"/>
+        <location filename="../main/MainWindow.cpp" line="3042"/>
         <source>Export the whole pane (%1x%2 pixels)</source>
         <translation>Экспортировать всё окно (%1x%2 пикселов)</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2856"/>
+        <location filename="../main/MainWindow.cpp" line="3044"/>
         <source>Export the visible area only (%1x%2 pixels)</source>
         <translation>Экспортировать только видимую часть (%1x%2 пикселов)</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2859"/>
+        <location filename="../main/MainWindow.cpp" line="3047"/>
         <source>Export the selection extent (%1x%2 pixels)</source>
         <translation>Экспортировать выделение (%1x%2 пикселов)</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2862"/>
+        <location filename="../main/MainWindow.cpp" line="3050"/>
+        <location filename="../main/MainWindow.cpp" line="3126"/>
         <source>Export the selection extent</source>
         <translation>Экспортировать выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2873"/>
+        <location filename="../main/MainWindow.cpp" line="3061"/>
         <source>Which region of the current pane do you want to export as an image?</source>
         <translation>Какую область текущего окна вы хотите экспортировать как изображение?</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2881"/>
+        <location filename="../main/MainWindow.cpp" line="3069"/>
         <source>Note: the whole pane is too wide to be exported as a single image.</source>
         <translation>Примечание: всё окно слишком широко, чтобы сохранить его как изображение.</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2906"/>
+        <location filename="../main/MainWindow.cpp" line="3094"/>
         <source>Failed to save image file</source>
         <translation>Не удалось сохранить файл изображения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2907"/>
+        <location filename="../main/MainWindow.cpp" line="3095"/>
         <source>Failed to save image file %1</source>
         <translation>Не удалось сохранить файл изображения %1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4062"/>
+        <location filename="../main/MainWindow.cpp" line="4372"/>
         <source>Selection: %1 to %2 (duration %3)</source>
         <translation>Выделение: %1 до %2 (длительность %3)</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="183"/>
+        <location filename="../main/MainWindow.cpp" line="190"/>
         <source>Black</source>
         <translation>Чёрный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="184"/>
+        <location filename="../main/MainWindow.cpp" line="191"/>
         <source>Red</source>
         <translation>Красный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="185"/>
+        <location filename="../main/MainWindow.cpp" line="192"/>
         <source>Blue</source>
         <translation>Синий</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="186"/>
-        <location filename="../main/MainWindow.cpp" line="232"/>
-        <location filename="../main/MainWindow.cpp" line="3469"/>
+        <location filename="../main/MainWindow.cpp" line="193"/>
+        <location filename="../main/MainWindow.cpp" line="3736"/>
         <source>Green</source>
         <translation>Зелёный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="187"/>
+        <location filename="../main/MainWindow.cpp" line="194"/>
         <source>Purple</source>
         <translation>Пурпурный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="188"/>
+        <location filename="../main/MainWindow.cpp" line="195"/>
         <source>Orange</source>
         <translation>Оранжевый</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="189"/>
+        <location filename="../main/MainWindow.cpp" line="196"/>
         <source>White</source>
         <translation>Белый</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="190"/>
+        <location filename="../main/MainWindow.cpp" line="197"/>
         <source>Bright Red</source>
         <translation>Ярко-красный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="191"/>
+        <location filename="../main/MainWindow.cpp" line="198"/>
         <source>Bright Blue</source>
         <translation>Ярко-синий</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="192"/>
-        <location filename="../main/MainWindow.cpp" line="229"/>
-        <location filename="../main/MainWindow.cpp" line="3466"/>
+        <location filename="../main/MainWindow.cpp" line="199"/>
+        <location filename="../main/MainWindow.cpp" line="3738"/>
         <source>Bright Green</source>
         <translation>Ярко-зелёный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="193"/>
+        <location filename="../main/MainWindow.cpp" line="200"/>
         <source>Bright Purple</source>
         <translation>Ярко-пурпурный</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="194"/>
+        <location filename="../main/MainWindow.cpp" line="201"/>
         <source>Bright Orange</source>
         <translation>Ярко-оранжевый</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="465"/>
+        <location filename="../main/MainWindow.cpp" line="495"/>
         <source>File and Session Management</source>
-        <translation>Файлы и управление сеансами</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="489"/>
+        <translation>Файлы и управление сессиями</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="519"/>
         <source>&amp;Import More Audio...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="491"/>
+        <translation>&amp;Импортировать ещё аудиофайл…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="521"/>
         <source>Import an extra audio file into a new pane</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="510"/>
+        <translation>Открыть дополнительный аудиофайл в новой панели</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="540"/>
         <source>Open &amp;Recent</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="561"/>
+        <translation>Открыть &amp;недавний</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="591"/>
         <source>Export audio from selection into a data file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="601"/>
+        <location filename="../main/MainWindow.cpp" line="637"/>
         <source>Apply Session Template</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="610"/>
+        <translation>Применить шаблон сессии</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="646"/>
         <source>Export Session as Template...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="617"/>
+        <translation>Экспортировать сессию как шаблон…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="653"/>
         <source>Manage Exported Templates</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="647"/>
+        <translation>Открыть папку с шаблонами</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="683"/>
         <source>Editing</source>
         <translation>Редактирование</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="683"/>
+        <location filename="../main/MainWindow.cpp" line="719"/>
         <source>Paste at Playback Position</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="684"/>
+        <translation>Вставить под курсор воспроизведения</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="720"/>
         <source>Ctrl+Shift+V</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="685"/>
+        <translation>Ctrl+Shift+V</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="721"/>
         <source>Paste from the clipboard to the current layer, placing the first item at the playback position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="694"/>
-        <location filename="../main/MainWindow.cpp" line="2343"/>
+        <location filename="../main/MainWindow.cpp" line="730"/>
+        <location filename="../main/MainWindow.cpp" line="2523"/>
         <source>Delete items in current selection from the current layer</source>
         <translation>Удалить объекты в активном выделении текущего слоя</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="704"/>
+        <location filename="../main/MainWindow.cpp" line="740"/>
         <source>Selection</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="750"/>
+        <location filename="../main/MainWindow.cpp" line="786"/>
         <source>Tapping Time Instants</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="768"/>
+        <location filename="../main/MainWindow.cpp" line="809"/>
         <source>Insert new time instants at the start and end of the current selected regions, in a new layer if necessary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="784"/>
+        <location filename="../main/MainWindow.cpp" line="847"/>
         <source>Number New Instants with</source>
         <translation>Способ нумерации новых отметок</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="804"/>
+        <location filename="../main/MainWindow.cpp" line="867"/>
         <source>Cycle size</source>
         <translation>Размер цикла</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="831"/>
+        <location filename="../main/MainWindow.cpp" line="894"/>
         <source>Set Numbering Counters...</source>
         <translation>Установить счетчики нумерации...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="832"/>
+        <location filename="../main/MainWindow.cpp" line="895"/>
         <source>Set the counters used for counter-based labelling</source>
         <translation>Устанолвить счетчики для меток на основе подсчета</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="836"/>
+        <location filename="../main/MainWindow.cpp" line="899"/>
         <source>Renumber Selected Instants</source>
         <translation>Перенумеровать выбранные отметки</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="837"/>
+        <location filename="../main/MainWindow.cpp" line="900"/>
         <source>Renumber the selected instants using the current labelling scheme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="853"/>
+        <location filename="../main/MainWindow.cpp" line="930"/>
         <source>Panning and Navigation</source>
         <translation>Прокрутка и перемещение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="907"/>
+        <location filename="../main/MainWindow.cpp" line="984"/>
         <source>Zoom</source>
         <translation>Масштаб просмотра</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="935"/>
+        <location filename="../main/MainWindow.cpp" line="1012"/>
         <source>F</source>
         <translation>F</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="944"/>
+        <location filename="../main/MainWindow.cpp" line="1021"/>
         <source>Display Features</source>
         <translation>Отображение элементов</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="956"/>
+        <location filename="../main/MainWindow.cpp" line="1033"/>
         <source>#</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="957"/>
+        <location filename="../main/MainWindow.cpp" line="1034"/>
         <source>Show or hide all time rulers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1036"/>
+        <location filename="../main/MainWindow.cpp" line="1113"/>
         <source>Show La&amp;yer Summary</source>
         <translation>&amp;Показать сводку по слою</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1037"/>
+        <location filename="../main/MainWindow.cpp" line="1114"/>
         <source>Y</source>
         <translation>Y</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1038"/>
+        <location filename="../main/MainWindow.cpp" line="1115"/>
         <source>Open a window displaying the hierarchy of panes and layers in this session</source>
-        <translation>Открыть окно, в котором отобразится иерархия окон и слоев активного сеанса</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1094"/>
+        <translation>Открыть окно, в котором отобразится иерархия окон и слоев активной сессии</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1232"/>
         <source>Managing Panes and Layers</source>
         <translation>Управление окнами и слоями</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1097"/>
+        <location filename="../main/MainWindow.cpp" line="1235"/>
         <source>N</source>
         <translation>N</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1131"/>
+        <location filename="../main/MainWindow.cpp" line="1267"/>
         <source>T</source>
         <translation>T</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1188"/>
+        <location filename="../main/MainWindow.cpp" line="1156"/>
         <source>W</source>
         <translation>W</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1191"/>
+        <location filename="../main/MainWindow.cpp" line="1158"/>
         <source>Shift+W</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1199"/>
+        <location filename="../main/MainWindow.cpp" line="1337"/>
         <source>Add Spectro&amp;gram</source>
         <translation>Добавить &amp;спектограмму</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1201"/>
+        <location filename="../main/MainWindow.cpp" line="1164"/>
         <source>G</source>
         <translation>G</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1204"/>
+        <location filename="../main/MainWindow.cpp" line="1166"/>
         <source>Shift+G</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1213"/>
+        <location filename="../main/MainWindow.cpp" line="1172"/>
         <source>M</source>
         <translation>M</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1216"/>
+        <location filename="../main/MainWindow.cpp" line="1174"/>
         <source>Shift+M</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1223"/>
+        <location filename="../main/MainWindow.cpp" line="1357"/>
         <source>Add Pea&amp;k Frequency Spectrogram</source>
         <translation>Добавить спектограмму &amp;пиковой частоты</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1225"/>
+        <location filename="../main/MainWindow.cpp" line="1180"/>
         <source>K</source>
         <translation>K</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1228"/>
+        <location filename="../main/MainWindow.cpp" line="1182"/>
         <source>Shift+K</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1237"/>
+        <location filename="../main/MainWindow.cpp" line="1188"/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1240"/>
+        <location filename="../main/MainWindow.cpp" line="1190"/>
         <source>Shift+U</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1379"/>
+        <location filename="../main/MainWindow.cpp" line="1509"/>
         <source>Switch to Previous Pane</source>
         <translation>Перейти к предыдущему окну</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1380"/>
+        <location filename="../main/MainWindow.cpp" line="1510"/>
         <source>[</source>
         <translation>[</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1381"/>
+        <location filename="../main/MainWindow.cpp" line="1511"/>
         <source>Make the next pane up in the pane stack current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1387"/>
+        <location filename="../main/MainWindow.cpp" line="1517"/>
         <source>Switch to Next Pane</source>
         <translation>Перейти к следующему окну</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1388"/>
+        <location filename="../main/MainWindow.cpp" line="1518"/>
         <source>]</source>
         <translation>]</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1389"/>
+        <location filename="../main/MainWindow.cpp" line="1519"/>
         <source>Make the next pane down in the pane stack current</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1398"/>
+        <location filename="../main/MainWindow.cpp" line="1528"/>
         <source>Ctrl+Shift+D</source>
         <translation>Ctrl+Shift+D</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1448"/>
+        <location filename="../main/MainWindow.cpp" line="1578"/>
         <source>R</source>
         <translation>R</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1455"/>
+        <location filename="../main/MainWindow.cpp" line="1585"/>
         <source>Edit Layer Data</source>
         <translation>Изменить данные слоя</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1456"/>
+        <location filename="../main/MainWindow.cpp" line="1586"/>
         <source>E</source>
         <translation>E</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1457"/>
+        <location filename="../main/MainWindow.cpp" line="1587"/>
         <source>Edit the currently active layer as a data grid</source>
         <translation>Изменить активный слой как сетку данных</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1464"/>
+        <location filename="../main/MainWindow.cpp" line="1594"/>
         <source>Ctrl+D</source>
         <translation>Ctrl+D</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1726"/>
+        <location filename="../main/MainWindow.cpp" line="1891"/>
         <source>Help</source>
         <translation>Справка</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1734"/>
+        <location filename="../main/MainWindow.cpp" line="1899"/>
         <source>F1</source>
         <translation>F1</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1735"/>
+        <location filename="../main/MainWindow.cpp" line="1900"/>
         <source>Open the %1 reference manual</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1740"/>
+        <location filename="../main/MainWindow.cpp" line="1905"/>
         <source>&amp;Key and Mouse Reference</source>
         <translation>&amp;Использование клавиатуры и мыши</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1741"/>
+        <location filename="../main/MainWindow.cpp" line="1906"/>
         <source>F2</source>
         <translation>F2</translation>
     </message>
@@ -3950,512 +4084,637 @@
         <translation type="obsolete">Открыть окно, в котором перечисляются клавиатурные комбинации Sonic Visualiser</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1767"/>
+        <location filename="../main/MainWindow.cpp" line="1940"/>
         <source>Ctrl+R</source>
         <translation>Ctrl+R</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1769"/>
+        <location filename="../main/MainWindow.cpp" line="1942"/>
         <source>Re-open</source>
         <translation>Повторно открыть</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1771"/>
+        <location filename="../main/MainWindow.cpp" line="1944"/>
         <source>Re-open the current or most recently opened file</source>
         <translation>Повторно открыть активный или недавно открывавшийся файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1782"/>
+        <location filename="../main/MainWindow.cpp" line="1955"/>
         <source>Standard Waveform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1818"/>
+        <translation type="unfinished">Обычная волновая форма сигнала</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1991"/>
         <source>Choose Default Template...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1843"/>
+        <translation>Выбрать шаблон по умолчанию…</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2016"/>
         <source>Ctrl+T</source>
         <translation>Ctrl+T</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1845"/>
+        <location filename="../main/MainWindow.cpp" line="2018"/>
         <source>Repeat Transform</source>
         <translation>Повторить преобразование</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1847"/>
+        <location filename="../main/MainWindow.cpp" line="2020"/>
         <source>Re-select the most recently run transform</source>
         <translation>Повторно запустить самое последнее выполнявшееся преобразование</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1937"/>
+        <location filename="../main/MainWindow.cpp" line="2110"/>
         <source>Playback and Transport Controls</source>
         <translation>Управление воспроизведением и перемоткой</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1941"/>
+        <location filename="../main/MainWindow.cpp" line="2114"/>
         <source>Play&amp;back</source>
         <translation>Воспро&amp;изведение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1944"/>
+        <location filename="../main/MainWindow.cpp" line="2117"/>
         <source>Playback</source>
         <translation>Воспроизведение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1946"/>
+        <location filename="../main/MainWindow.cpp" line="2119"/>
         <source>Playback Toolbar</source>
         <translation>Панель воспроизведения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1956"/>
+        <location filename="../main/MainWindow.cpp" line="2129"/>
         <source>PgUp</source>
         <translation>PgUp</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1957"/>
+        <location filename="../main/MainWindow.cpp" line="2130"/>
         <source>Rewind to the previous time instant or time ruler notch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1981"/>
+        <location filename="../main/MainWindow.cpp" line="2161"/>
         <source>PgDown</source>
         <translation>PgDown</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1982"/>
+        <location filename="../main/MainWindow.cpp" line="2162"/>
         <source>Fast-forward to the next time instant or time ruler notch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2000"/>
+        <location filename="../main/MainWindow.cpp" line="2180"/>
         <source>Record</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2002"/>
+        <translation>Записать</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2182"/>
         <source>Ctrl+Space</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2003"/>
+        <location filename="../main/MainWindow.cpp" line="2183"/>
         <source>Record a new audio file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2017"/>
+        <location filename="../main/MainWindow.cpp" line="2197"/>
         <source>Constrain playback to the selected regions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2035"/>
+        <location filename="../main/MainWindow.cpp" line="2215"/>
         <source>Solo Current Pane</source>
         <translation>Соло активного окна</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2039"/>
+        <location filename="../main/MainWindow.cpp" line="2219"/>
         <source>o</source>
         <translation>o</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2040"/>
+        <location filename="../main/MainWindow.cpp" line="2220"/>
         <source>Solo the current pane during playback</source>
         <translation>При воспроизведении звучит лишь активное окно</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2049"/>
+        <location filename="../main/MainWindow.cpp" line="2229"/>
         <source>Align File Timelines</source>
         <translation>Выровнять линейки времени</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2052"/>
+        <location filename="../main/MainWindow.cpp" line="2232"/>
         <source>Treat multiple audio files as versions of the same work, and align their timelines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2107"/>
+        <location filename="../main/MainWindow.cpp" line="2287"/>
         <source>Speed Up</source>
         <translation>Ускорить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2108"/>
+        <location filename="../main/MainWindow.cpp" line="2288"/>
         <source>Ctrl+PgUp</source>
         <translation>Ctrl+PgUp</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2109"/>
+        <location filename="../main/MainWindow.cpp" line="2289"/>
         <source>Time-stretch playback to speed it up without changing pitch</source>
         <translation>Сжать время воспроизведения, не меняя высоту тона</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2113"/>
+        <location filename="../main/MainWindow.cpp" line="2293"/>
         <source>Slow Down</source>
         <translation>Замедлить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2114"/>
+        <location filename="../main/MainWindow.cpp" line="2294"/>
         <source>Ctrl+PgDown</source>
         <translation>Ctrl+PgDown</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2115"/>
+        <location filename="../main/MainWindow.cpp" line="2295"/>
         <source>Time-stretch playback to slow it down without changing pitch</source>
         <translation>Расширить время воспроизведения, не меняя высоту тона</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2119"/>
+        <location filename="../main/MainWindow.cpp" line="2299"/>
         <source>Restore Normal Speed</source>
         <translation>Восстановить обычную скорость</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2120"/>
+        <location filename="../main/MainWindow.cpp" line="2300"/>
         <source>Ctrl+Home</source>
         <translation>Ctrl+Home</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2121"/>
+        <location filename="../main/MainWindow.cpp" line="2301"/>
         <source>Restore non-time-stretched playback</source>
         <translation>Восстановить естественную скорость воспроизведения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2139"/>
-        <location filename="../main/MainWindow.cpp" line="2167"/>
-        <location filename="../main/MainWindow.cpp" line="2196"/>
-        <location filename="../main/MainWindow.cpp" line="2217"/>
-        <location filename="../main/MainWindow.cpp" line="2235"/>
-        <location filename="../main/MainWindow.cpp" line="2253"/>
+        <location filename="../main/MainWindow.cpp" line="2319"/>
+        <location filename="../main/MainWindow.cpp" line="2347"/>
+        <location filename="../main/MainWindow.cpp" line="2376"/>
+        <location filename="../main/MainWindow.cpp" line="2397"/>
+        <location filename="../main/MainWindow.cpp" line="2415"/>
+        <location filename="../main/MainWindow.cpp" line="2433"/>
         <source>Tool Selection</source>
         <translation>Выбор инструмента</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2153"/>
+        <location filename="../main/MainWindow.cpp" line="2333"/>
         <source>Navigate Tool Mouse Actions</source>
         <translation type="unfinished">Использование мыши с инструментом навигации</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2156"/>
+        <location filename="../main/MainWindow.cpp" line="2336"/>
         <source>Click left button and drag to move around</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2158"/>
-        <location filename="../main/MainWindow.cpp" line="2273"/>
+        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2453"/>
         <source>Zoom to Area</source>
         <translation type="unfinished">Масштабировать в выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2159"/>
-        <location filename="../main/MainWindow.cpp" line="2274"/>
+        <location filename="../main/MainWindow.cpp" line="2339"/>
+        <location filename="../main/MainWindow.cpp" line="2454"/>
         <source>Shift-click left button and drag to zoom to a rectangular area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2161"/>
+        <location filename="../main/MainWindow.cpp" line="2341"/>
         <source>Relocate</source>
-        <translation type="unfinished">Перемещение скачком</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2161"/>
-        <location filename="../main/MainWindow.cpp" line="2164"/>
-        <location filename="../main/MainWindow.cpp" line="2214"/>
-        <location filename="../main/MainWindow.cpp" line="2270"/>
+        <translation>Переместить</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2341"/>
+        <location filename="../main/MainWindow.cpp" line="2344"/>
+        <location filename="../main/MainWindow.cpp" line="2394"/>
+        <location filename="../main/MainWindow.cpp" line="2450"/>
         <source>Double-Click Left</source>
         <translation type="unfinished">Двойной щелчок левой клавишей</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2162"/>
+        <location filename="../main/MainWindow.cpp" line="2342"/>
         <source>Double-click left button to jump to clicked location</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2165"/>
-        <location filename="../main/MainWindow.cpp" line="2215"/>
+        <location filename="../main/MainWindow.cpp" line="2345"/>
+        <location filename="../main/MainWindow.cpp" line="2395"/>
         <source>Double-click left button on an item to edit it</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2179"/>
+        <location filename="../main/MainWindow.cpp" line="2359"/>
         <source>Select Tool Mouse Actions</source>
         <translation type="unfinished">Использование мыши с инструментом выделения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2182"/>
+        <location filename="../main/MainWindow.cpp" line="2362"/>
         <source>Click left button and drag to select region; drag region edge to resize</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2185"/>
-        <location filename="../main/MainWindow.cpp" line="2189"/>
+        <location filename="../main/MainWindow.cpp" line="2365"/>
+        <location filename="../main/MainWindow.cpp" line="2369"/>
         <source>Multi Select</source>
         <translation type="unfinished">Множественное выделение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2186"/>
+        <location filename="../main/MainWindow.cpp" line="2366"/>
         <source>Cmd-click left button and drag to select an additional region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2190"/>
+        <location filename="../main/MainWindow.cpp" line="2370"/>
         <source>Ctrl-click left button and drag to select an additional region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2193"/>
+        <location filename="../main/MainWindow.cpp" line="2373"/>
         <source>Fine Select</source>
         <translation type="unfinished">Выделить точно</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2194"/>
+        <location filename="../main/MainWindow.cpp" line="2374"/>
         <source>Shift-click left button and drag to select without snapping to items or grid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2209"/>
+        <location filename="../main/MainWindow.cpp" line="2389"/>
         <source>Edit Tool Mouse Actions</source>
         <translation type="unfinished">Использование мыши с инструментом редактирования</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2211"/>
+        <location filename="../main/MainWindow.cpp" line="2391"/>
         <source>Move</source>
         <translation type="unfinished">Переместить</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2212"/>
+        <location filename="../main/MainWindow.cpp" line="2392"/>
         <source>Click left button on an item or selected region and drag to move</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2230"/>
+        <location filename="../main/MainWindow.cpp" line="2410"/>
         <source>Draw Tool Mouse Actions</source>
         <translation type="unfinished">Использование мыши с инструментом рисования</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2233"/>
+        <location filename="../main/MainWindow.cpp" line="2413"/>
         <source>Click left button and drag to create new item</source>
         <translation type="unfinished">Щелкните левой клавишей мыши и перетащите курсор для создания нового объекта</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2237"/>
-        <location filename="../main/MainWindow.cpp" line="2250"/>
+        <location filename="../main/MainWindow.cpp" line="2417"/>
+        <location filename="../main/MainWindow.cpp" line="2430"/>
         <source>Erase</source>
         <translation>Стерка</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2239"/>
+        <location filename="../main/MainWindow.cpp" line="2419"/>
         <source>5</source>
         <translation>5</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2240"/>
+        <location filename="../main/MainWindow.cpp" line="2420"/>
         <source>Erase items from layer</source>
         <translation>Стирать объекты слоя</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2248"/>
+        <location filename="../main/MainWindow.cpp" line="2428"/>
         <source>Erase Tool Mouse Actions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2251"/>
+        <location filename="../main/MainWindow.cpp" line="2431"/>
         <source>Click left button on an item to remove it from the layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2254"/>
+        <location filename="../main/MainWindow.cpp" line="2434"/>
         <source>Measure</source>
         <translation>Измеритель</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2256"/>
+        <location filename="../main/MainWindow.cpp" line="2436"/>
         <source>6</source>
         <translation>6</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2257"/>
+        <location filename="../main/MainWindow.cpp" line="2437"/>
         <source>Make measurements in layer</source>
         <translation>Выполнять измерения в слое</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2265"/>
+        <location filename="../main/MainWindow.cpp" line="2445"/>
         <source>Measure Tool Mouse Actions</source>
         <translation type="unfinished">Использование мыши с инструментом измерения</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2267"/>
+        <location filename="../main/MainWindow.cpp" line="2447"/>
         <source>Measure Area</source>
         <translation type="unfinished">Измерить область</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2268"/>
+        <location filename="../main/MainWindow.cpp" line="2448"/>
         <source>Click left button and drag to measure a rectangular area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2270"/>
+        <location filename="../main/MainWindow.cpp" line="2450"/>
         <source>Measure Item</source>
         <translation type="unfinished">Измерить объект</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2271"/>
+        <location filename="../main/MainWindow.cpp" line="2451"/>
         <source>Click left button and drag to measure extents of an item or shape</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2338"/>
+        <location filename="../main/MainWindow.cpp" line="2518"/>
         <source>&amp;Delete Current Measurement</source>
         <translation>&amp;Удалить активный замер</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2339"/>
+        <location filename="../main/MainWindow.cpp" line="2519"/>
         <source>Delete the measurement currently under the mouse pointer</source>
         <translation>Удалить замер, находящийся под курсором мыши</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2348"/>
+        <location filename="../main/MainWindow.cpp" line="2528"/>
         <source>Fast Forward to Next Instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2350"/>
+        <location filename="../main/MainWindow.cpp" line="2530"/>
         <source>Rewind to Previous Instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2353"/>
+        <location filename="../main/MainWindow.cpp" line="2533"/>
         <source>Fast Forward to Next Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2354"/>
+        <location filename="../main/MainWindow.cpp" line="2534"/>
         <source>Fast forward to the next point in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2355"/>
+        <location filename="../main/MainWindow.cpp" line="2535"/>
         <source>Rewind to Previous Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2356"/>
+        <location filename="../main/MainWindow.cpp" line="2536"/>
         <source>Rewind to the previous point in the current layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2359"/>
+        <location filename="../main/MainWindow.cpp" line="2539"/>
         <source>Fast forward</source>
         <translation>Быстрый вперед</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2453"/>
-        <location filename="../main/MainWindow.cpp" line="2467"/>
-        <location filename="../main/MainWindow.cpp" line="2481"/>
+        <location filename="../main/MainWindow.cpp" line="2635"/>
+        <location filename="../main/MainWindow.cpp" line="2649"/>
+        <location filename="../main/MainWindow.cpp" line="2663"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Audio file &quot;%1&quot; could not be opened</source>
         <translation>&lt;b&gt;Не удалось открыть файл&lt;/b&gt;&lt;p&gt;Не удалось открыть звуковой файл &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2601"/>
+        <location filename="../main/MainWindow.cpp" line="2783"/>
         <source>Export the selected regions into a single file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2603"/>
+        <location filename="../main/MainWindow.cpp" line="2785"/>
         <source>Export the whole file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2718"/>
+        <location filename="../main/MainWindow.cpp" line="2908"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Layer file %1 could not be opened.</source>
         <translation>&lt;b&gt;Не удалось открыть файл&lt;/b&gt;&lt;p&gt;Не удалось открыть файл слоя &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2783"/>
+        <location filename="../main/MainWindow.cpp" line="2973"/>
         <source>Can&apos;t export non-note layers to MIDI</source>
         <translation>Невозможно экспортировать ненотные слои в MIDI</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2795"/>
+        <location filename="../main/MainWindow.cpp" line="2985"/>
         <source>Sorry, cannot export this layer type to RDF (supported types are: region, note, text, time instants, time values)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4697"/>
+        <location filename="../main/MainWindow.cpp" line="3124"/>
+        <source>Export the whole pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3125"/>
+        <source>Export the visible area only</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3135"/>
+        <source>Which region of the current pane do you want to export as a scalable SVG image?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3163"/>
+        <source>Failed to save SVG file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3164"/>
+        <source>Failed to save SVG file %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4030"/>
+        <source>Failed to query transform attributes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4031"/>
+        <source>&lt;b&gt;Failed to query transform attributes&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4102"/>
+        <source>Multiplexed audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4124"/>
+        <source>Transform failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4125"/>
+        <source>&lt;b&gt;Failed to run transform&lt;/b&gt;&lt;p&gt;Plugin or server error: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4720"/>
+        <source>Subdivide instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4721"/>
+        <source>Number of subdivisions:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4742"/>
+        <source>Winnow instants</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4743"/>
+        <source>Remove all instants apart from multiples of:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4832"/>
+        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment:&lt;p&gt;%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4917"/>
+        <source>Adjust the master playback level and pan</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5038"/>
+        <source>With Qt v%1 &amp;copy; The Qt Company</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5096"/>
+        <source>&lt;br&gt;With Rubber Band Library v%1 &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5098"/>
+        <source>&lt;br&gt;With Rubber Band Library &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5101"/>
+        <source>&lt;br&gt;With Vamp plugin support (API v%1, host SDK v%2) &amp;copy; Chris Cannam and QMUL</source>
+        <translation>&lt;br&gt;С поддержкой плагинов Vamp (API v%1, host SDK v%2) &amp;copy; Chris Cannam и QMUL</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5102"/>
+        <source>&lt;br&gt;With Piper Vamp protocol bridge &amp;copy; QMUL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5111"/>
+        <source>&lt;br&gt;With Dataquay Qt/RDF library &amp;copy; Particular Programs Ltd</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5112"/>
+        <source>&lt;br&gt;With Cap&apos;n Proto serialisation &amp;copy; Sandstorm Development Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5126"/>
+        <source>Russian UI translation contributed by Alexandre Prokoudine.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5128"/>
+        <source>Czech UI translation contributed by Pavel Fric.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5215"/>
         <source>&lt;h3&gt;Newer version available&lt;/h3&gt;&lt;p&gt;You are using version %1 of Sonic Visualiser, but version %2 is now available.&lt;/p&gt;&lt;p&gt;Please see the &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;Sonic Visualiser website&lt;/a&gt; for more information.&lt;/p&gt;</source>
-        <translation type="unfinished">&lt;h3&gt;Доступна более новая версия&lt;/h3&gt;&lt;p&gt;Вы используетее Sonic Visualiser версии %1, но уже доступна версия %3.&lt;/p&gt;&lt;p&gt;Загляните на &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;сайт Sonic Visualiser&lt;/a&gt; за подробностями.&lt;/p&gt; {3&gt;?} {3&gt;?} {1 ?} {2 ?}</translation>
+        <translation>&lt;h3&gt;Доступна новая версия программы&lt;/h3&gt;&lt;p&gt;Вы используетее Sonic Visualiser версии %1, но уже доступна версия %2.&lt;/p&gt;&lt;p&gt;Загляните на &lt;a href=&quot;http://sonicvisualiser.org/&quot;&gt;сайт Sonic Visualiser&lt;/a&gt;, чтобы узнать подробности.&lt;/p&gt; {3&gt;?} {3&gt;?} {1 ?} {2 ?}</translation>
     </message>
     <message>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;Session file &quot;%1&quot; could not be opened</source>
         <translation type="vanished">&lt;b&gt;Не удалось открыть файл&lt;/b&gt;&lt;p&gt;Не удалось открыть файл сеанса &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3032"/>
+        <location filename="../main/MainWindow.cpp" line="3288"/>
         <source>&lt;b&gt;File open failed&lt;/b&gt;&lt;p&gt;File &quot;%1&quot; could not be opened</source>
         <translation>&lt;b&gt;Не удалось открыть файл&lt;/b&gt;&lt;p&gt;Не удалось открыть файл &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3064"/>
+        <location filename="../main/MainWindow.cpp" line="3320"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;URL &quot;%1&quot; could not be opened</source>
         <translation>&lt;b&gt;Не удалось открыть ссылку&lt;/b&gt;&lt;p&gt;Не удалось открыть URL &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3092"/>
+        <location filename="../main/MainWindow.cpp" line="3353"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;File or URL &quot;%1&quot; could not be opened</source>
         <translation>&lt;b&gt;Не удалось открыть ссылку&lt;/b&gt;&lt;p&gt;Не удалось открыть файл или URL &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3135"/>
+        <location filename="../main/MainWindow.cpp" line="3396"/>
         <source>Enter template name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3140"/>
+        <translation>Введите название шаблона</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3401"/>
         <source>Please enter a name for the saved template:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3144"/>
+        <location filename="../main/MainWindow.cpp" line="3405"/>
         <source>Set as default template for future audio files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3164"/>
+        <location filename="../main/MainWindow.cpp" line="3425"/>
         <source>Template file exists</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3165"/>
+        <location filename="../main/MainWindow.cpp" line="3426"/>
         <source>&lt;b&gt;Template file exists&lt;/b&gt;&lt;p&gt;The template &quot;%1&quot; already exists.&lt;br&gt;Overwrite it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3222"/>
-        <location filename="../main/MainWindow.cpp" line="3227"/>
+        <location filename="../main/MainWindow.cpp" line="3486"/>
+        <location filename="../main/MainWindow.cpp" line="3491"/>
         <source>Failed to open dropped URL</source>
         <translation>Не удалось открыть URL, перемещенный мышью в окно программы</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3223"/>
+        <location filename="../main/MainWindow.cpp" line="3487"/>
         <source>&lt;b&gt;Open failed&lt;/b&gt;&lt;p&gt;Dropped URL &quot;%1&quot; could not be opened</source>
         <translation>&lt;b&gt;Не удалось открыть ссылку&lt;/b&gt;&lt;p&gt;Не удалось открыть файл URL &quot;%1&quot;, перетащенный в окно программы мышью</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3360"/>
+        <location filename="../main/MainWindow.cpp" line="3623"/>
         <source>&lt;b&gt;Session modified&lt;/b&gt;&lt;p&gt;The current session has been modified.&lt;br&gt;Do you want to save it?</source>
         <translation>&lt;b&gt;Сеанс изменился&lt;/b&gt;&lt;p&gt;Активный сеанс изменился&lt;br&gt;Вы хотите сохранить его?</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3422"/>
-        <location filename="../main/MainWindow.cpp" line="3445"/>
+        <location filename="../main/MainWindow.cpp" line="3685"/>
+        <location filename="../main/MainWindow.cpp" line="3708"/>
         <source>&lt;b&gt;Save failed&lt;/b&gt;&lt;p&gt;Session file &quot;%1&quot; could not be saved.</source>
-        <translation>&lt;b&gt;Не удалось сохранить файл&lt;/b&gt;&lt;p&gt;Не удалось сохранить файл сеанса &quot;%1&quot;</translation>
+        <translation>&lt;b&gt;Не удалось сохранить файл&lt;/b&gt;&lt;p&gt;Не удалось сохранить файл сессии &quot;%1&quot;</translation>
     </message>
     <message>
         <source>%1: %1</source>
         <translation type="obsolete">%1: %1 {1:?}</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3933"/>
+        <location filename="../main/MainWindow.cpp" line="4238"/>
         <source>Playback speed: Normal</source>
         <translation>Скорость воспроизведения: обычная</translation>
     </message>
@@ -4464,141 +4723,132 @@
         <translation type="vanished">Скорость воспроизведения: %1%2%</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4117"/>
+        <location filename="../main/MainWindow.cpp" line="4426"/>
         <source>&lt;b&gt;Wrong sample rate&lt;/b&gt;&lt;p&gt;The sample rate of this audio file (%1 Hz) does not match
 the current playback rate (%2 Hz).&lt;p&gt;The file will play at the wrong speed and pitch.&lt;p&gt;Change the &lt;i&gt;Resample mismatching files on import&lt;/i&gt; option under &lt;i&gt;File&lt;/i&gt; -&gt; &lt;i&gt;Preferences&lt;/i&gt; if you want to alter this behaviour.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4129"/>
+        <location filename="../main/MainWindow.cpp" line="4438"/>
         <source>&lt;b&gt;Overloaded&lt;/b&gt;&lt;p&gt;Audio effects plugin auditioning has been disabled due to a processing overload.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4352"/>
+        <location filename="../main/MainWindow.cpp" line="4700"/>
         <source>Reset Counters</source>
         <translation>Обнуление счетчиков</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4396"/>
-        <location filename="../main/MainWindow.cpp" line="4431"/>
+        <location filename="../main/MainWindow.cpp" line="4788"/>
+        <location filename="../main/MainWindow.cpp" line="4823"/>
         <source>Warning</source>
         <translation>Предупреждение</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4410"/>
+        <location filename="../main/MainWindow.cpp" line="4802"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to regenerate derived layer &quot;%1&quot; using new data model as input.&lt;p&gt;The layer transform &quot;%2&quot; failed:&lt;p&gt;%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4417"/>
+        <location filename="../main/MainWindow.cpp" line="4809"/>
         <source>&lt;b&gt;Layer generation failed&lt;/b&gt;&lt;p&gt;Failed to regenerate derived layer &quot;%1&quot; using new data model as input.&lt;p&gt;The layer transform &quot;%2&quot; failed.&lt;p&gt;No error information is available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4431"/>
+        <location filename="../main/MainWindow.cpp" line="4823"/>
         <source>&lt;b&gt;Warning when regenerating layer&lt;/b&gt;&lt;p&gt;When regenerating the derived layer &quot;%1&quot; using new data model as input:&lt;p&gt;%2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4441"/>
+        <location filename="../main/MainWindow.cpp" line="4831"/>
         <source>Failed to calculate alignment</source>
         <translation>Не удалось рассчитать выравнивание</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4442"/>
-        <source>&lt;b&gt;Alignment calculation failed&lt;/b&gt;&lt;p&gt;Failed to calculate an audio alignment using transform &quot;%1&quot;:&lt;p&gt;%2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4583"/>
+        <location filename="../main/MainWindow.cpp" line="5046"/>
         <source>&lt;br&gt;With JACK audio output library &amp;copy; Paul Davis and Jack O&apos;Quin</source>
         <translation>&lt;br&gt;С библиотекой JACK &amp;copy; Paul Davis и Jack O&apos;Quin</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4587"/>
+        <location filename="../main/MainWindow.cpp" line="5050"/>
         <source>&lt;br&gt;With PortAudio audio output library &amp;copy; Ross Bencina and Phil Burk</source>
         <translation>&lt;br&gt;С библиотекой PortAudio &amp;copy; Ross Bencina и Phil Burk</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4593"/>
+        <location filename="../main/MainWindow.cpp" line="5056"/>
         <source>&lt;br&gt;With PulseAudio audio output library &amp;copy; Lennart Poettering and Pierre Ossman</source>
         <translation>&lt;br&gt;С библиотекой PulseAudio &amp;copy; Lennart Poettering и Pierre Ossman</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4139"/>
+        <location filename="../main/MainWindow.cpp" line="4448"/>
         <source>&lt;b&gt;Overloaded&lt;/b&gt;&lt;p&gt;Audio playback speed processing has been reduced to a single channel, due to a processing overload.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4635"/>
         <source>&lt;br&gt;With Rubber Band &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;С Rubber Band &amp;copy; Chris Cannam</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1708"/>
+        <translation type="vanished">&lt;br&gt;С Rubber Band &amp;copy; Chris Cannam</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1873"/>
         <source>Find a Transform...</source>
         <translation>Найти эффект трансформации...</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1709"/>
+        <location filename="../main/MainWindow.cpp" line="1874"/>
         <source>Search for a transform from the installed plugins, by name or description</source>
-        <translation>Найти эффект трансформации среди установленных расширений по названию или описанию</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="1710"/>
+        <translation>Найти эффект трансформации среди установленных плагинов по названию или описанию</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="1875"/>
         <source>Ctrl+M</source>
         <translation>Ctrl+M</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4570"/>
+        <location filename="../main/MainWindow.cpp" line="5029"/>
         <source>&lt;p&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;br&gt;&lt;a href=&quot;http://www.sonicvisualiser.org/&quot;&gt;http://www.sonicvisualiser.org/&lt;/a&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sonic Visualiser — программа для просмотра и исследования звукозаписей с целью семантического анализа и аннотации музыки.&lt;br&gt;&lt;a href=&quot;http://www.sonicvisualiser.org/&quot;&gt;http://www.sonicvisualiser.org/&lt;/a&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4571"/>
         <source>&lt;p&gt;&lt;small&gt;%1 : %2 configuration&lt;/small&gt;&lt;/p&gt;</source>
-        <translation type="unfinished">&lt;p&gt;&lt;small&gt;%1 : конфигурация %2&lt;/small&gt;&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4577"/>
+        <translation type="obsolete">&lt;p&gt;&lt;small&gt;%1 : конфигурация %2&lt;/small&gt;&lt;/p&gt;</translation>
+    </message>
+    <message>
         <source>With Qt v%1 &amp;copy; Nokia Corporation</source>
-        <translation>С использованием Qt v%1 &amp;copy; Nokia Corporation</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4581"/>
+        <translation type="vanished">С использованием Qt v%1 &amp;copy; Nokia Corporation</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5044"/>
         <source>&lt;br&gt;With JACK audio output library v%1 &amp;copy; Paul Davis and Jack O&apos;Quin</source>
         <translation>&lt;br&gt;С библиотекой JACK v%1 &amp;copy; Paul Davis и Jack O&apos;Quin</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4591"/>
+        <location filename="../main/MainWindow.cpp" line="5054"/>
         <source>&lt;br&gt;With PulseAudio audio output library v%1 &amp;copy; Lennart Poettering and Pierre Ossman</source>
         <translation>&lt;br&gt;С библиотекой PulseAudio v%1 &amp;copy; Lennart Poettering и Pierre Ossman</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4605"/>
+        <location filename="../main/MainWindow.cpp" line="5068"/>
         <source>&lt;br&gt;With MAD mp3 decoder v%1 &amp;copy; Underbit Technologies Inc</source>
         <translation>&lt;br&gt;С декодером mp3 MAD v%1 &amp;copy; Underbit Technologies Inc</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4612"/>
+        <location filename="../main/MainWindow.cpp" line="5075"/>
         <source>&lt;br&gt;With libsamplerate v%1 &amp;copy; Erik de Castro Lopo</source>
         <translation>&lt;br&gt;С libsamplerate v%1 &amp;copy; Erik de Castro Lopo</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4619"/>
+        <location filename="../main/MainWindow.cpp" line="5082"/>
         <source>&lt;br&gt;With libsndfile v%1 &amp;copy; Erik de Castro Lopo</source>
         <translation>&lt;br&gt;С libsndfile v%1 &amp;copy; Erik de Castro Lopo</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4626"/>
+        <location filename="../main/MainWindow.cpp" line="5089"/>
         <source>&lt;br&gt;With FFTW3 v%1 &amp;copy; Matteo Frigo and MIT</source>
         <translation>&lt;br&gt;С FFTW3 v%1 &amp;copy; Matteo Frigo и MIT</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4633"/>
         <source>&lt;br&gt;With Rubber Band v%1 &amp;copy; Chris Cannam</source>
-        <translation>&lt;br&gt;С Rubber Band v%1 &amp;copy; Chris Cannam</translation>
+        <translation type="vanished">&lt;br&gt;С Rubber Band v%1 &amp;copy; Chris Cannam</translation>
     </message>
     <message>
         <source>&lt;br&gt;With Raptor RDF parser v%1 &amp;copy; Dave Beckett and the University of Bristol</source>
@@ -4617,215 +4867,239 @@
         <translation type="obsolete">&lt;br&gt;С движком запросов RDF  Rasqal &amp;copy; Dave Beckett и Бристольский университет</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4644"/>
+        <location filename="../main/MainWindow.cpp" line="5106"/>
         <source>&lt;br&gt;With Redland RDF datastore v%1 &amp;copy; Dave Beckett and the University of Bristol</source>
         <translation>&lt;br&gt;C хранилищем данных RDF Redland v%1 &amp;copy; Dave Beckett и Бристольский университет</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4646"/>
+        <location filename="../main/MainWindow.cpp" line="5108"/>
         <source>&lt;br&gt;With Redland RDF datastore &amp;copy; Dave Beckett and the University of Bristol</source>
         <translation>&lt;br&gt;C хранилищем данных RDF Redland &amp;copy; Dave Beckett и Бристольский университет</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4655"/>
+        <location filename="../main/MainWindow.cpp" line="5117"/>
         <source>&lt;br&gt;With liblo Lite OSC library v%1 &amp;copy; Steve Harris</source>
         <translation>&lt;br&gt;С библиотекой OSC liblo v%1 &amp;copy; Steve Harris</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4661"/>
+        <location filename="../main/MainWindow.cpp" line="5033"/>
         <source>&lt;/small&gt;&lt;p&gt;&lt;small&gt;The OSC URL for this instance is: &quot;%1&quot;</source>
-        <translation>&lt;/small&gt;&lt;p&gt;&lt;small&gt;Адрес OSC для этого сеанса: &quot;%1&quot;</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4668"/>
+        <translation>&lt;/small&gt;&lt;p&gt;&lt;small&gt;Адрес OSC для этой сессии: &quot;%1&quot;</translation>
+    </message>
+    <message>
         <source>With </source>
-        <translation>С</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4668"/>
+        <translation type="vanished">С</translation>
+    </message>
+    <message>
         <source>Using </source>
-        <translation>Используя</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="889"/>
+        <translation type="vanished">Используя</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="966"/>
         <source>Peek Left</source>
         <translation>Глянуть влево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="890"/>
+        <location filename="../main/MainWindow.cpp" line="967"/>
         <source>Alt+Left</source>
         <translation>Alt+влево</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="891"/>
+        <location filename="../main/MainWindow.cpp" line="968"/>
         <source>Scroll the current pane to the left without moving the playback cursor or other panes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="897"/>
+        <location filename="../main/MainWindow.cpp" line="974"/>
         <source>Peek Right</source>
         <translation>Глянуть вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="898"/>
+        <location filename="../main/MainWindow.cpp" line="975"/>
         <source>Alt+Right</source>
         <translation>Alt+вправо</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="899"/>
+        <location filename="../main/MainWindow.cpp" line="976"/>
         <source>Scroll the current pane to the right without moving the playback cursor or other panes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1043"/>
+        <location filename="../main/MainWindow.cpp" line="1120"/>
         <source>Show Acti&amp;vity Log</source>
         <translation>Показать &amp;журнал действий</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1044"/>
+        <location filename="../main/MainWindow.cpp" line="1121"/>
         <source>Open a window listing interactions and other events</source>
         <translation>Открыть окно со списком всех действий в сеансе</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2682"/>
+        <location filename="../main/MainWindow.cpp" line="2872"/>
         <source>Export multiple audio files</source>
         <translation>Экспортировать несколько звуковых файлов </translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2684"/>
+        <location filename="../main/MainWindow.cpp" line="2874"/>
         <source>Export audio to &quot;%1&quot;</source>
         <translation>Экспорт звука в &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2723"/>
-        <location filename="../main/MainWindow.cpp" line="3036"/>
-        <location filename="../main/MainWindow.cpp" line="3068"/>
-        <location filename="../main/MainWindow.cpp" line="3096"/>
-        <location filename="../main/MainWindow.cpp" line="3228"/>
+        <location filename="../main/MainWindow.cpp" line="2913"/>
+        <location filename="../main/MainWindow.cpp" line="3292"/>
+        <location filename="../main/MainWindow.cpp" line="3324"/>
+        <location filename="../main/MainWindow.cpp" line="3357"/>
+        <location filename="../main/MainWindow.cpp" line="3492"/>
         <source>&lt;b&gt;Audio required&lt;/b&gt;&lt;p&gt;Unable to load layer data from &quot;%1&quot; without an audio file.&lt;br&gt;Please load at least one audio file before importing annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2819"/>
+        <location filename="../main/MainWindow.cpp" line="3009"/>
         <source>Export layer to &quot;%1&quot;</source>
         <translation>Экспорт слоя в &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3338"/>
+        <location filename="../main/MainWindow.cpp" line="3601"/>
         <source>Export image to &quot;%1&quot;</source>
         <translation>Экспорт изображения в &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3393"/>
+        <location filename="../main/MainWindow.cpp" line="3656"/>
         <source>Close the current session and create a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3394"/>
+        <location filename="../main/MainWindow.cpp" line="3657"/>
         <source>Add this data to the current session</source>
-        <translation>Добавить эти данные в активный сеанс</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="3398"/>
+        <translation>Добавить эти данные в активную сессию</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="3661"/>
         <source>Select target for import</source>
         <translation>Выбрать цель для импорта</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3399"/>
+        <location filename="../main/MainWindow.cpp" line="3662"/>
         <source>&lt;b&gt;Select a target for import&lt;/b&gt;&lt;p&gt;This RDF document refers to one or more audio files.&lt;br&gt;You already have an audio waveform loaded.&lt;br&gt;What would you like to do with the new data?</source>
         <translation>&lt;b&gt;Выберите цель импорта&lt;/b&gt;&lt;p&gt;Этот документ RDF ссылается на один или более звуковых файлов.&lt;br&gt;У вас уже есть один загруженный звуковой файл.&lt;br&gt;Что вы хотите сделать с новыми данными?</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="3454"/>
+        <location filename="../main/MainWindow.cpp" line="3717"/>
         <source>Save session as &quot;%1&quot;</source>
-        <translation>Сохранение сеанса как &quot;%1&quot;</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="4224"/>
+        <translation>Сохранение сессию как &quot;%1&quot;</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4559"/>
         <source>Add Point</source>
         <translation>Добавить точку</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4543"/>
+        <location filename="../main/MainWindow.cpp" line="4938"/>
         <source>http://www.sonicvisualiser.org/doc/reference/%1/en/</source>
         <translation>http://www.sonicvisualiser.org/doc/reference/%1/en/</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4651"/>
+        <location filename="../main/MainWindow.cpp" line="4950"/>
+        <source>What&apos;s New</source>
+        <translation>Что нового в программе</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4962"/>
+        <source>&lt;h3&gt;What&apos;s New in %1&lt;/h3&gt;</source>
+        <translation>&lt;h3&gt;Что нового в %1&lt;/h3&gt;</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="4971"/>
+        <source>&lt;b&gt;Note:&lt;/b&gt; A newer version of Sonic Visualiser is available.&lt;br&gt;(Version %1 is available; you are using version %2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5017"/>
+        <source>%1 : %2 configuration, %3-bit build</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5113"/>
         <source>&lt;br&gt;With RtMidi &amp;copy; Gary P. Scavone</source>
         <translation>&lt;br&gt;С RtMidi &amp;copy; Gary P. Scavone</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="530"/>
+        <location filename="../main/MainWindow.cpp" line="560"/>
         <source>Ctrl+Shift+S</source>
         <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="774"/>
+        <location filename="../main/MainWindow.cpp" line="825"/>
         <source>Insert Item at Selection</source>
         <translation>Вставить объект в выделение</translation>
     </message>
     <message>
+        <location filename="../main/MainWindow.cpp" line="833"/>
         <source>Ctrl+Shift+Enter</source>
-        <translation type="vanished">Ctrl+Shift+Enter</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="776"/>
+        <translation>Ctrl+Shift+Enter</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="827"/>
         <source>Insert a new note or region item corresponding to the current selection</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1961"/>
+        <location filename="../main/MainWindow.cpp" line="2134"/>
         <source>Rewind to Similar Point</source>
         <translation>Назад к первой схожей точке</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1962"/>
+        <location filename="../main/MainWindow.cpp" line="2135"/>
         <source>Shift+PgUp</source>
         <translation>Shift+PgUp</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1963"/>
+        <location filename="../main/MainWindow.cpp" line="2136"/>
         <source>Rewind to the previous similarly valued time instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1986"/>
+        <location filename="../main/MainWindow.cpp" line="2166"/>
         <source>Fast Forward to Similar Point</source>
         <translation>Вперед к первой схожей точке</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1987"/>
+        <location filename="../main/MainWindow.cpp" line="2167"/>
         <source>Shift+PgDown</source>
         <translation>Shift+PgDown</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="1988"/>
+        <location filename="../main/MainWindow.cpp" line="2168"/>
         <source>Fast-forward to the next similarly valued time instant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2529"/>
+        <location filename="../main/MainWindow.cpp" line="2711"/>
         <source>1. %2</source>
-        <translation type="unfinished">1. %2</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2536"/>
+        <translation>1. %2</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2718"/>
         <source>%1. %2</source>
-        <translation type="unfinished">%1. %2</translation>
-    </message>
-    <message>
-        <location filename="../main/MainWindow.cpp" line="2549"/>
+        <translation>%1. %2</translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2731"/>
         <source>Select audio file to export</source>
         <translation>Укажите экспортируемый звуковой файл</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="2550"/>
+        <location filename="../main/MainWindow.cpp" line="2732"/>
         <source>Which audio file do you want to export from?</source>
         <translation>Какой звуковой файл вы хотите экспортировать?</translation>
     </message>
     <message>
-        <location filename="../main/MainWindow.cpp" line="4696"/>
+        <location filename="../main/MainWindow.cpp" line="5146"/>
+        <source>About %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="5214"/>
         <source>Newer version available</source>
         <translation>Доступна более новая версия</translation>
     </message>
@@ -4837,41 +5111,41 @@
 <context>
     <name>MainWindowBase</name>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="645"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="698"/>
         <source>%1 (modified)</source>
         <translation>%1 (изменен)</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="660"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="713"/>
         <source> (modified)</source>
         <translation> (изменен)</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="858"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="939"/>
         <source>Cut</source>
         <translation>Вырезать</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="929"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1010"/>
         <source>Paste</source>
         <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1035"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1058"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1148"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1167"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1186"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1116"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1139"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1229"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1248"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1267"/>
         <source>Add Point</source>
         <translation>Добавить точку</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1089"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1170"/>
         <source>Add Point at %1 s</source>
         <translation>Добавить точку по отметке %1 с</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1227"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1359"/>
         <source>Opening file or URL...</source>
         <translation>Открывается файл или URL...</translation>
     </message>
@@ -4884,130 +5158,220 @@
         <translation type="obsolete">Загрузить этот файл в новое окно волновой формы</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1366"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1440"/>
+        <source>Not enough disc space</source>
+        <translation>Недостаточно дискового пространства</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1441"/>
+        <source>&lt;b&gt;Not enough disc space&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough spare disc space to accommodate any necessary temporary files.&lt;/p&gt;&lt;p&gt;Please clear some space and try again.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1448"/>
+        <source>Not enough memory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1449"/>
+        <source>&lt;b&gt;Not enough memory&lt;/b&gt;&lt;p&gt;There doesn&apos;t appear to be enough memory to accommodate any necessary temporary data.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1519"/>
         <source>Select target for import</source>
         <translation>Выбрать цель для импорта</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1367"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1520"/>
         <source>&lt;b&gt;Select a target for import&lt;/b&gt;&lt;p&gt;You already have an audio file loaded.&lt;br&gt;What would you like to do with the new audio file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1468"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1892"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2022"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2763"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1621"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2095"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2242"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3131"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1475"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2770"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1628"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3138"/>
         <source>%1: %2 [%3]</source>
         <translation>%1: %2 [%3]</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1490"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1531"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1645"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1689"/>
         <source>Import &quot;%1&quot;</source>
         <translation>Импортировать &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1587"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1745"/>
         <source>Opening playlist...</source>
         <translation>Открывается список воспроизведения...</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1792"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1995"/>
         <source>Opening session...</source>
-        <translation>Открывается сеанс...</translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1877"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1976"/>
+        <translation>Открывается сессия…</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2080"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2194"/>
         <source>SV XML file read error:
 %1</source>
         <translation>Ошибка чтения XML-файла SV:
 %1</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1988"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2110"/>
+        <source>Incomplete session loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2111"/>
+        <source>Some of the audio content referred to by the original session file could not be loaded.
+If you save this session, it will be saved without any reference to that audio, and information may be lost.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2206"/>
         <source>Open session template &quot;%1&quot;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2070"/>
+        <translation>Открыть шаблон сессии &quot;%1&quot;</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2292"/>
         <source>&lt;b&gt;Failed to import RDF&lt;/b&gt;&lt;p&gt;No suitable data models found for import from RDF document at &quot;%1&quot;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2217"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2489"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2491"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open audio device: %1&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2494"/>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2496"/>
+        <source>&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2503"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;).&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2505"/>
+        <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Failed to open your preferred audio driver (&quot;%1&quot;): %2.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2508"/>
+        <source>&lt;p&gt;Audio playback and recording will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2510"/>
+        <source>&lt;p&gt;Audio playback will not be available during this session.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2515"/>
         <source>Couldn&apos;t open audio device</source>
         <translation>Не удалось открыть звуковое устройство</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2308"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2321"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2359"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2630"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2643"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2681"/>
         <source>Failed to write file</source>
         <translation>Не удалось записать файл</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2309"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2322"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2360"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2631"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2644"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2682"/>
         <source>&lt;b&gt;Save failed&lt;/b&gt;&lt;p&gt;Failed to write to file &quot;%1&quot;: %2</source>
         <translation>&lt;b&gt;Не удалось сохранить&lt;/b&gt;&lt;p&gt;Не удалось записать файл &quot;%1&quot;: %2</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2783"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3049"/>
+        <source>No record device available</source>
+        <translation>Нет доступных устройств записи</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3050"/>
+        <source>&lt;b&gt;No record device available&lt;/b&gt;&lt;p&gt;Failed to find or open an audio device for recording. Only playback will be available.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3078"/>
+        <source>Recording failed</source>
+        <translation>Не удалось записать</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3079"/>
+        <source>&lt;b&gt;Recording failed&lt;/b&gt;&lt;p&gt;Failed to switch to record mode (some internal problem?)&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3151"/>
         <source>Import Recorded Audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3075"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3446"/>
         <source>Add Pane</source>
         <translation>Добавить окно</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3121"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3492"/>
         <source>Remove Pane</source>
         <translation>Удалить окно</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3144"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3561"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3515"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3932"/>
         <source>Delete Pane</source>
         <translation>Удалить окно</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3380"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3751"/>
         <source>Playing: %1 of %2 (%3 remaining)</source>
         <translation>Воспроизводится: %1 из %2 (осталось %3)</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="3392"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="3763"/>
         <source>Recording: %1</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2218"/>
+        <translation>Запись: %1</translation>
+    </message>
+    <message>
         <source>&lt;b&gt;No audio available&lt;/b&gt;&lt;p&gt;Could not open an audio device for playback.&lt;p&gt;Automatic audio device detection failed. Audio playback will not be available during this session.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Беззвучный режим&lt;/b&gt;&lt;p&gt;Не удалось открыть звуковое устройство для воспроизведения.&lt;p&gt;Не удалось автоматически определить звуковое устройство. На этот раз придется обойтись без воспроизведения звука.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1360"/>
+        <translation type="vanished">&lt;b&gt;Беззвучный режим&lt;/b&gt;&lt;p&gt;Не удалось открыть звуковое устройство для воспроизведения.&lt;p&gt;Не удалось автоматически определить звуковое устройство. На этот раз придется обойтись без воспроизведения звука.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1513"/>
         <source>Close the current session and start a new one</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1361"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1514"/>
         <source>Replace the main audio file in this session</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1362"/>
+        <translation>Заменить основной аудиофайл в этйо сессии</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1515"/>
         <source>Add the audio file to this session</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5016,8 +5380,8 @@
         <translation type="vanished">&lt;b&gt;Беззвучный режим&lt;/b&gt;&lt;p&gt;Не удалось открыть предпочитаемое звуковое устройство («%1»).&lt;p&gt;На этот раз придется обойтись без воспроизведения звука.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2041"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2065"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2261"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2287"/>
         <source>Importing from RDF...</source>
         <translation>Выполняется импорт из RDF...</translation>
     </message>
@@ -5026,43 +5390,43 @@
         <translation type="obsolete">&lt;b&gt;Выберите цель импорта&lt;/b&gt;&lt;p&gt;У вас уже есть один загруженный звуковой файл.&lt;br&gt;Что вы хотите сделать с новыми звуковыми данными?</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1449"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1602"/>
         <source>Import audio file &quot;%1&quot;</source>
         <translation>Импорт звукового файла &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1673"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1831"/>
         <source>Import layer XML file &quot;%1&quot;</source>
         <translation>Импорт XML-файла слоя &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1707"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1865"/>
         <source>Import MIDI file &quot;%1&quot;</source>
         <translation>Импорт файла MIDI &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1890"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2093"/>
         <source>Import session file &quot;%1&quot;</source>
-        <translation>Импорт файла сеанса &quot;%1&quot;</translation>
-    </message>
-    <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2056"/>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2069"/>
+        <translation>Импорт файла сессии &quot;%1&quot;</translation>
+    </message>
+    <message>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2278"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2291"/>
         <source>Failed to import RDF</source>
         <translation>Не удалось импортировать RDF</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2057"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2279"/>
         <source>&lt;b&gt;Failed to import RDF&lt;/b&gt;&lt;p&gt;Importing data from RDF document at &quot;%1&quot; failed: %2&lt;/p&gt;</source>
         <translation>&lt;b&gt;Не удалось импортировать RDF&lt;/b&gt;&lt;p&gt;Не удалось импортировать данные из документа RDF &quot;%1&quot;: %2&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="2074"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="2296"/>
         <source>Import RDF document &quot;%1&quot;</source>
         <translation>Импорт документа RDF &quot;%1&quot;</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/MainWindowBase.cpp" line="1132"/>
+        <location filename="../svapp/framework/MainWindowBase.cpp" line="1213"/>
         <source>Add Item at %1 s</source>
         <translation>Добавить объект в позицию %1с</translation>
     </message>
@@ -5190,7 +5554,7 @@
         <translation>%1 &lt;%2&gt;</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/ModelTransformerFactory.cpp" line="239"/>
+        <location filename="../svcore/transform/ModelTransformerFactory.cpp" line="238"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
@@ -5198,53 +5562,68 @@
 <context>
     <name>NetworkPermissionTester</name>
     <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="44"/>
+        <location filename="../main/NetworkPermissionTester.cpp" line="48"/>
         <source>Welcome to Sonic Visualiser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="53"/>
-        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary, University of London, Sonic Visualiser is provided free as open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like to make networking connections and open a network port.&lt;/p&gt;&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control, where configured; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;No personal information will be sent, no tracking is carried out, and all requests happen in the background without interrupting your work.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful. But if you do not wish to do so, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/NetworkPermissionTester.cpp" line="69"/>
+        <translation>Приветствуем в Sonic Visualiser</translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="55"/>
+        <source>&lt;h2&gt;Welcome to Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.&lt;/p&gt;&lt;p&gt;Developed in the Centre for Digital Music at Queen Mary University of London, Sonic Visualiser is open source software under the GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Before we go on...&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser would like permission to use the network.&lt;/p&gt;</source>
+        <translation>&lt;h2&gt;Приветствуем в Sonic Visualiser!&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;:icons/qm-logo-smaller.png&quot; style=&quot;float:right&quot;&gt;Это программа для просмотра и исследования звуковых данных с целью семантического анализа и аннотации музыки.&lt;/p&gt;&lt;p&gt;Программа разработана в Центре фировой музыки (Centre for Digital Music) университета Королевы Мэри (Queen Mary University) в Лондоне. Sonic Visualiser — приложение с открытым исходным кодом, которое распространяется на условиях GNU General Public License.&lt;/p&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Перед началом работы…&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sonic Visualiser необходимо получить ваше разрешение на доступ в Сеть.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="66"/>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins;&lt;/li&gt;&lt;li&gt; Support the use of Open Sound Control; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation>&lt;p&gt;Для чего это нужно:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Находить информацию о доступных и установленных плагинах;&lt;/li&gt;&lt;li&gt; Использовать протокол Open Sound Control;&lt;/li&gt;&lt;li&gt; Сообщать вам о появлении новых версий программы.&lt;/li&gt;&lt;/ul&gt;</translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="74"/>
+        <source>&lt;p&gt;This is to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Find information about available and installed plugins; and&lt;/li&gt;&lt;li&gt; Tell you when updates are available.&lt;/li&gt;&lt;/ul&gt;</source>
+        <translation>&lt;p&gt;Для чего это нужно:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Находить информацию о доступных и установленных плагинах;&lt;/li&gt;&lt;li&gt; Сообщать вам о появлении новых версий программы.&lt;/li&gt;&lt;/ul&gt;</translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="83"/>
+        <source>&lt;p&gt;&lt;b&gt;No personal information will be sent, no tracking is carried out, and no individual information will be shared with anyone else.&lt;/b&gt; We will however make aggregate counts of distinct requests for usage reporting.&lt;/p&gt;&lt;p&gt;We recommend that you allow this, because it makes Sonic Visualiser more useful to you and supports the public funding of this work. But if you do not wish to allow it, please un-check the box below.&lt;br&gt;&lt;/p&gt;</source>
+        <translation>&lt;p&gt;&lt;b&gt;Программа не будет передавать персональные данные, следить за вами или делиться с кем-то вашей личной информацией.&lt;/b&gt; Однако Sonic Visualiser будет собирать базовую статистику о своем использовании.&lt;/p&gt;&lt;p&gt;Мы рекомендуем разрешить программе доступ в Сеть, поскольку это позволит нам сделать Sonic Visualiser лучше для вас, а кроме того, поможет с финансированием разработки. Если вы против, просто снимите флажок ниже.&lt;br&gt;&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../main/NetworkPermissionTester.cpp" line="92"/>
         <source>Allow this</source>
-        <translation type="unfinished"></translation>
+        <translation>Разрешить доступ в Сеть</translation>
     </message>
 </context>
 <context>
     <name>NoteLayer</name>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="56"/>
         <location filename="../svgui/layer/NoteLayer.cpp" line="57"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="897"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="58"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="898"/>
         <source>New Point</source>
         <translation>Новая точка</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="94"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="95"/>
         <source>Vertical Scale</source>
         <translation>Верт. масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="160"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="161"/>
         <source>Auto-Align</source>
         <translation>Автовыравнивание</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="473"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="474"/>
         <source>In progress</source>
         <translation>В процессе</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="475"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="498"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="476"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="499"/>
         <source>No local points</source>
         <translation>Нет локальных точек</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="532"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="533"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -5255,7 +5634,7 @@
 Без метки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="537"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="538"/>
         <source>Time:	%1
 Pitch:	%2
 Duration:	%3
@@ -5266,108 +5645,108 @@
 Метка:	%4</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="902"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="903"/>
         <source>Draw Point</source>
         <translation>Нарисовать точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1030"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1031"/>
         <source>Drag Point</source>
         <translation>Перетащить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1051"/>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1099"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1052"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1100"/>
         <source>Edit Point</source>
         <translation>Изменить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1053"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1054"/>
         <source>Relocate Point</source>
         <translation>Переместить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1056"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1057"/>
         <source>Change Point Value</source>
         <translation>Изменить значение точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1115"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1116"/>
         <source>Drag Selection</source>
         <translation>Перетащить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1140"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1141"/>
         <source>Resize Selection</source>
         <translation>Изменить размер выделения</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1179"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1180"/>
         <source>Delete Selected Points</source>
         <translation>Удалить выбранные точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1240"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1241"/>
         <source>Paste</source>
         <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="95"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="96"/>
         <source>Scale Units</source>
         <translation type="unfinished">Единицы шкалы</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="111"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="112"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="161"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="162"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="162"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="163"/>
         <source>Log</source>
         <translation>Логарифмический</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="163"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="164"/>
         <source>MIDI Notes</source>
         <translation>Ноты MIDI</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="525"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="526"/>
         <source>%1 %2</source>
         <translation>%1 %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="978"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="979"/>
         <source>Erase Point</source>
         <translation>Стереть точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1225"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1226"/>
         <source>Re-align pasted items?</source>
         <translation>Заново выровнять вставленные объекты?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1226"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1227"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="1311"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="1312"/>
         <source>Record Note</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="512"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="513"/>
         <source>%1 (%2, %3 Hz)</source>
         <translation>%1 (%2, %3 Гц)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/NoteLayer.cpp" line="519"/>
+        <location filename="../svgui/layer/NoteLayer.cpp" line="520"/>
         <source>%1 Hz (%2, %3)</source>
         <translation>%1Гц (%2, %3)</translation>
     </message>
@@ -5423,7 +5802,7 @@
 <context>
     <name>OggVorbisFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/OggVorbisFileReader.cpp" line="77"/>
+        <location filename="../svcore/data/fileio/OggVorbisFileReader.cpp" line="110"/>
         <source>Decoding %1...</source>
         <translation>Декодируется %1...</translation>
     </message>
@@ -5436,7 +5815,7 @@
         <translation>Обзор</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Overview.cpp" line="362"/>
+        <location filename="../svgui/view/Overview.cpp" line="359"/>
         <source>Click and drag to navigate; double-click to jump</source>
         <translation>Щёлкните и потащите для перемещения по окну; щёлкните дважды для скачка</translation>
     </message>
@@ -5444,285 +5823,285 @@
 <context>
     <name>Pane</name>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="675"/>
+        <location filename="../svgui/view/Pane.cpp" line="699"/>
         <source>Some lengthy prefix:</source>
         <translation>Некий длинный префикс:</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1064"/>
+        <location filename="../svgui/view/Pane.cpp" line="1091"/>
         <source>(R)</source>
         <translation>(R)</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1067"/>
+        <location filename="../svgui/view/Pane.cpp" line="1089"/>
         <source>(X)</source>
         <translation>(X)</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1071"/>
+        <location filename="../svgui/view/Pane.cpp" line="1095"/>
         <source>%1 / %2Hz%3</source>
         <translation>%1 / %2 Гц%3</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2631"/>
+        <location filename="../svgui/view/Pane.cpp" line="2659"/>
         <source>Drag Selection</source>
         <translation>Перетащить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2638"/>
+        <location filename="../svgui/view/Pane.cpp" line="2666"/>
         <source>Resize Selection</source>
         <translation>Изменить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="141"/>
+        <location filename="../svgui/view/Pane.cpp" line="143"/>
         <source>Horizontal Zoom</source>
         <translation>Горизонтальное масштабирование</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="167"/>
+        <location filename="../svgui/view/Pane.cpp" line="169"/>
         <source>Vertical Zoom</source>
         <translation>Вертикальное масштабирование</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2508"/>
+        <location filename="../svgui/view/Pane.cpp" line="2536"/>
         <source>Enter new range</source>
         <translation>Введите новый диапазон</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2509"/>
+        <location filename="../svgui/view/Pane.cpp" line="2537"/>
         <source>New vertical display range, from %1 to %2 %4:</source>
         <translation>Новый диапазон отображения по вертикали, от %1 до %2 %4:</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2802"/>
+        <location filename="../svgui/view/Pane.cpp" line="2830"/>
         <source>Click and drag to navigate</source>
         <translation>Щёлкните и потащите для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2819"/>
+        <location filename="../svgui/view/Pane.cpp" line="2847"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Ctrl for multi-select; middle-click and drag to navigate</source>
         <translation>Щёлкните и потащите для выделения области; + Shift — для отключения прилипания к объектам; + Ctrl — для выделения нескольких объектов, + средняя клавиша мыши — для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2813"/>
+        <location filename="../svgui/view/Pane.cpp" line="2841"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; hold Cmd for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished">Щёлкните и потащите для выделения области; + Shift — для отключения прилипания к объектам; + Cmd — для выделения нескольких объектов, + средняя клавиша мыши — для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2821"/>
+        <location filename="../svgui/view/Pane.cpp" line="2849"/>
         <source>Click and drag to select a range; hold Ctrl for multi-select; middle-click and drag to navigate</source>
         <translation>Щёлкните и потащите для выделения диапазона; + Ctrl — для выделения нескольких объектов, + средняя клавиша мыши — для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2815"/>
+        <location filename="../svgui/view/Pane.cpp" line="2843"/>
         <source>Click and drag to select a range; hold Cmd for multi-select; middle-click and drag to navigate</source>
         <translation type="unfinished">Щёлкните и потащите для выделения диапазона; + Cmd — для выделения нескольких объектов, + средняя клавиша мыши — для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2830"/>
+        <location filename="../svgui/view/Pane.cpp" line="2858"/>
         <source>Click and drag to move the selection boundary</source>
         <translation>Щёлкните и потащите для перемещения границ выделения</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2835"/>
+        <location filename="../svgui/view/Pane.cpp" line="2863"/>
         <source>Click and drag to select a range; hold Shift to avoid snapping to items; middle-click to navigate</source>
         <translation>Щёлкните и потащите для выделения области; + Shift — для отключения прилипания к объектам; + средняя клавиша мыши — для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2837"/>
+        <location filename="../svgui/view/Pane.cpp" line="2865"/>
         <source>Click and drag to select a range; middle-click and drag to navigate</source>
         <translation>Щёлкните и потащите для выделения области; + средняя клавиша мыши — для перемещения по окну</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2845"/>
+        <location filename="../svgui/view/Pane.cpp" line="2873"/>
         <source>Click to add a new item in the active layer</source>
         <translation>Щёлкните для добавления нового объекта на активный слой</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2864"/>
+        <location filename="../svgui/view/Pane.cpp" line="2892"/>
         <source>Click and drag to move all items in the selected range</source>
         <translation>Щёлкните и потащите все объекты в выделенной области</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2880"/>
+        <location filename="../svgui/view/Pane.cpp" line="2908"/>
         <source>Click and drag to adjust the visible range of the vertical scale</source>
         <translation>Щёлкните и потащите для смены видимого диапазона масштабирования по вертикали</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2882"/>
+        <location filename="../svgui/view/Pane.cpp" line="2910"/>
         <source>Click and drag to adjust the vertical zoom level</source>
         <translation>Щёлкните и потащите для смены уровня масштабирования по вертикали</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2884"/>
+        <location filename="../svgui/view/Pane.cpp" line="2912"/>
         <source>Click and drag to adjust the horizontal zoom level</source>
         <translation>Щёлкните и потащите для смены уровня масштабирования по горизонтали</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2886"/>
+        <location filename="../svgui/view/Pane.cpp" line="2914"/>
         <source>Reset horizontal and vertical zoom levels to their defaults</source>
         <translation>Сбросить уровни масштабирования по горизонтали и вертикали до исходных значений</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="836"/>
+        <location filename="../svgui/view/Pane.cpp" line="864"/>
         <source>Reference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="838"/>
-        <location filename="../svgui/view/Pane.cpp" line="842"/>
+        <location filename="../svgui/view/Pane.cpp" line="866"/>
+        <location filename="../svgui/view/Pane.cpp" line="870"/>
         <source>Unaligned</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="844"/>
+        <location filename="../svgui/view/Pane.cpp" line="872"/>
         <source>Aligning: %1%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="846"/>
+        <location filename="../svgui/view/Pane.cpp" line="874"/>
         <source>Aligned</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="888"/>
+        <location filename="../svgui/view/Pane.cpp" line="916"/>
         <source>%1 - %2</source>
         <translation>%1 - %2</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="998"/>
-        <location filename="../svgui/view/Pane.cpp" line="1014"/>
+        <location filename="../svgui/view/Pane.cpp" line="1026"/>
+        <location filename="../svgui/view/Pane.cpp" line="1042"/>
         <source>+%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1255"/>
-        <location filename="../svgui/view/Pane.cpp" line="1261"/>
+        <location filename="../svgui/view/Pane.cpp" line="1281"/>
+        <location filename="../svgui/view/Pane.cpp" line="1287"/>
         <source>Zoom</source>
         <translation>Масштабирование отображения</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1256"/>
+        <location filename="../svgui/view/Pane.cpp" line="1282"/>
         <source>Zoom In</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1256"/>
+        <location filename="../svgui/view/Pane.cpp" line="1282"/>
         <source>Wheel Up</source>
         <translation>Колесом вверх</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1257"/>
+        <location filename="../svgui/view/Pane.cpp" line="1283"/>
         <source>Zoom Out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1257"/>
+        <location filename="../svgui/view/Pane.cpp" line="1283"/>
         <source>Wheel Down</source>
         <translation>Колесом вниз</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1259"/>
+        <location filename="../svgui/view/Pane.cpp" line="1285"/>
         <source>General Pane Mouse Actions</source>
         <translation>Использование мыши в окнах</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1261"/>
+        <location filename="../svgui/view/Pane.cpp" line="1287"/>
         <source>Wheel</source>
         <translation>Колесо</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1262"/>
+        <location filename="../svgui/view/Pane.cpp" line="1288"/>
         <source>Zoom in or out in time axis</source>
         <translation>Приближение и отдаление по временной шкале</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1263"/>
+        <location filename="../svgui/view/Pane.cpp" line="1289"/>
         <source>Ctrl+Wheel</source>
         <translation>Ctrl+прокрутка</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1263"/>
+        <location filename="../svgui/view/Pane.cpp" line="1289"/>
         <source>Scroll</source>
-        <translation>Прокручивать окно сеанса</translation>
-    </message>
-    <message>
-        <location filename="../svgui/view/Pane.cpp" line="1264"/>
+        <translation>Прокручивать окно сессии</translation>
+    </message>
+    <message>
+        <location filename="../svgui/view/Pane.cpp" line="1290"/>
         <source>Scroll rapidly left or right in time axis</source>
         <translation>Быстро перемещаться вправо и влево по временной шкале</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1265"/>
+        <location filename="../svgui/view/Pane.cpp" line="1291"/>
         <source>Zoom Vertically</source>
         <translation>Вертикальный масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1265"/>
+        <location filename="../svgui/view/Pane.cpp" line="1291"/>
         <source>Shift+Wheel</source>
         <translation>Shift+прокрутка</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1266"/>
+        <location filename="../svgui/view/Pane.cpp" line="1292"/>
         <source>Zoom in or out in the vertical axis</source>
         <translation>Масштабировать отображение по вертикальной оси</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1267"/>
+        <location filename="../svgui/view/Pane.cpp" line="1293"/>
         <source>Scroll Vertically</source>
         <translation>Прокрутка по вертикали</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1267"/>
+        <location filename="../svgui/view/Pane.cpp" line="1293"/>
         <source>Alt+Wheel</source>
         <translation>Alt+Колесо</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1268"/>
+        <location filename="../svgui/view/Pane.cpp" line="1294"/>
         <source>Scroll up or down in the vertical axis</source>
         <translation>Прокручивать отображение по вертикальной оси</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1269"/>
+        <location filename="../svgui/view/Pane.cpp" line="1295"/>
         <source>Navigate</source>
         <translation>Перемещение</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1269"/>
+        <location filename="../svgui/view/Pane.cpp" line="1295"/>
         <source>Middle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1270"/>
+        <location filename="../svgui/view/Pane.cpp" line="1296"/>
         <source>Click middle button and drag to navigate with any tool</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1271"/>
+        <location filename="../svgui/view/Pane.cpp" line="1297"/>
         <source>Relocate</source>
         <translation>Перемещение скачком</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1271"/>
+        <location filename="../svgui/view/Pane.cpp" line="1297"/>
         <source>Double-Click Middle</source>
         <translation>Двойной щелчок средней клавишей</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1272"/>
+        <location filename="../svgui/view/Pane.cpp" line="1298"/>
         <source>Double-click middle button to relocate with any tool</source>
         <translation>Перескочить вправо или влево в зависимости от положения курсора</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1273"/>
+        <location filename="../svgui/view/Pane.cpp" line="1299"/>
         <source>Menu</source>
         <translation>Меню</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1273"/>
+        <location filename="../svgui/view/Pane.cpp" line="1299"/>
         <source>Right</source>
         <translation>Правая клавиша</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="1274"/>
+        <location filename="../svgui/view/Pane.cpp" line="1300"/>
         <source>Show pane context menu</source>
         <translation>Показать контекстное меню окна</translation>
     </message>
@@ -5803,17 +6182,17 @@
         <translation type="vanished">Измерить объект</translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2852"/>
+        <location filename="../svgui/view/Pane.cpp" line="2880"/>
         <source>Click to erase an item from the active layer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="188"/>
+        <location filename="../svgui/view/Pane.cpp" line="190"/>
         <source>Reset zoom to default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/Pane.cpp" line="2859"/>
+        <location filename="../svgui/view/Pane.cpp" line="2887"/>
         <source>Click and drag an item in the active layer to move it; hold Shift to override initial resistance</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5886,7 +6265,7 @@
     <message>
         <location filename="../svgui/widgets/PluginParameterBox.cpp" line="61"/>
         <source>This plugin has no adjustable parameters.</source>
-        <translation>У этого расширения нет изменяемых параметров.</translation>
+        <translation>У этого плагина нет изменяемых параметров.</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/PluginParameterBox.cpp" line="82"/>
@@ -5897,350 +6276,502 @@
 <context>
     <name>PluginParameterDialog</name>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="104"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="101"/>
         <source>Name:</source>
         <translation>Название:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="140"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="128"/>
         <source>Maker:</source>
         <translation>Автор:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="146"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="134"/>
         <source>Copyright:  </source>
         <translation>Авторские права:  </translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="127"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="121"/>
         <source>Version:</source>
         <translation>Версия:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="56"/>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="193"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="57"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="181"/>
         <source>Plugin Parameters</source>
-        <translation>Параметры расширения</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="324"/>
+        <translation>Параметры плагина</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="312"/>
         <source>Channel mismatch</source>
         <translation>Несовпадение каналов</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>This plugin requires at least %1 input channels, but only %2 %3 available.  The plugin probably will not work correctly.</source>
-        <translation>Этому расширению нужно хотя бы %1 вхдных каналовs, но лишь %2 %3 доступны.  Вероятно, расширение не сработает как должно.</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <translation>Этому плагину нужно хотя бы %1 входных каналов, но лишь %2 %3 доступны.  Вероятно, плагин не будет корректно работать.</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>are</source>
         <translation>являются</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="325"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="313"/>
         <source>is</source>
         <translation>является</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="219"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="207"/>
         <source>Channels</source>
         <translation>Каналы</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="342"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="330"/>
         <source>This plugin accepts no more than %1 input channels,
 but %2 are available.  Only the first %3 will be used.
 </source>
-        <translation>Это расширение принимает не более %1 каналов на входе,
-но доступно целых %2. Только первые %3 будут использованы.
+        <translation>Этот плагин принимает не более %1 каналов на входе,
+но доступно %2. Только первые %3 будут использованы.
 </translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="349"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="337"/>
         <source>This plugin only has a single channel input,
 but the source has %1 channels.</source>
-        <translation>Это расширение может обрабатывать только один канал,
+        <translation>Этот плагин может обрабатывать только один канал,
 но у источника %1 каналов.</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="352"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="340"/>
         <source>Use mean of source channels</source>
         <translation>Использовать среднее значение каналов источника</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="354"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="342"/>
         <source>Use channel %1 only</source>
         <translation>Использовать только канал %1</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="158"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="146"/>
         <source>Output:</source>
         <translation>Выход:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="225"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="213"/>
         <source>Processing</source>
         <translation>Обработка</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="406"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="394"/>
         <source>Window size:</source>
         <translation>Размер оконной функции:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="408"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="396"/>
         <source>Audio frames per block:</source>
         <translation>Выборок звука на блок:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="433"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="421"/>
         <source>Window increment:</source>
         <translation>Шаг:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="457"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="445"/>
         <source>Window shape:</source>
         <translation>Форма:</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="235"/>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="606"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="223"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="592"/>
         <source>Advanced &gt;&gt;</source>
         <translation>Больше &gt;&gt;</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="601"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="587"/>
         <source>Advanced &lt;&lt;</source>
         <translation>Меньше &lt;&lt;</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="177"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="165"/>
         <source>Input Material</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="186"/>
+        <location filename="../svgui/widgets/PluginParameterDialog.cpp" line="174"/>
         <source>Restrict to selection extents</source>
         <translation>Только выделение</translation>
     </message>
 </context>
 <context>
+    <name>PluginPathConfigurator</name>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="41"/>
+        <source>Move the selected location later in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="47"/>
+        <source>Move the selected location earlier in the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="53"/>
+        <source>Add a new location to the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="59"/>
+        <source>Remove the selected location from the list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="64"/>
+        <source>Reset to Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="65"/>
+        <source>Reset the list for this plugin type to its default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="72"/>
+        <source>Review plugins...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="79"/>
+        <source>Plugin locations for plugin type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="118"/>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="120"/>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="122"/>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="127"/>
+        <source>Vamp (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="129"/>
+        <source>LADSPA (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="131"/>
+        <source>DSSI (32-bit)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="188"/>
+        <source>(Variable is currently unset)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="192"/>
+        <source>(Current value begins: &quot;%1 ...&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="195"/>
+        <source>(Currently set to: &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="200"/>
+        <source>Allow the %1 environment variable to take priority over this
+%2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginPathConfigurator.cpp" line="327"/>
+        <source>Choose directory to add</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>PluginReviewDialog</name>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="31"/>
+        <source>Plugins Loaded</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="69"/>
+        <source>Type</source>
+        <translation type="unfinished">Тип</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="69"/>
+        <source>Library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Found in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="70"/>
+        <source>Name</source>
+        <translation type="unfinished">Название</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="78"/>
+        <source>Vamp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="95"/>
+        <source>DSSI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PluginReviewDialog.cpp" line="112"/>
+        <source>LADSPA</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>Preferences</name>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="124"/>
+        <location filename="../svcore/base/Preferences.cpp" line="127"/>
         <source>Frequency of concert A</source>
         <translation>Частота условной ноты Ля (A)</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="127"/>
+        <location filename="../svcore/base/Preferences.cpp" line="130"/>
         <source>Property box layout</source>
         <translation>Внешний вид панели свойств</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="130"/>
+        <location filename="../svcore/base/Preferences.cpp" line="133"/>
         <source>Spectral analysis window shape</source>
         <translation>Форма оконной функции при спектральном анализе</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="136"/>
+        <location filename="../svcore/base/Preferences.cpp" line="139"/>
         <source>Normalise audio signal when reading from audio file</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="145"/>
+        <translation>Нормировать звуковой сигнал при чтении аудиофайлов</translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="148"/>
+        <source>Load mp3 files in gapless mode</source>
+        <translation>Загружать файлы MP3 без интервалов</translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="151"/>
         <source>Single fixed sample rate to resample all files to</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="154"/>
+        <location filename="../svcore/base/Preferences.cpp" line="160"/>
         <source>Time display precision</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="157"/>
+        <translation>Точность показываемого времени</translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="163"/>
         <source>Use hours:minutes:seconds format</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="160"/>
+        <translation>Использовать формат часы:минуты:секунды</translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="166"/>
         <source>Label middle C as</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="323"/>
+        <location filename="../svcore/base/Preferences.cpp" line="329"/>
         <source>Show boxes for all panes</source>
         <translation>Показывать панели для всех окон</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="324"/>
+        <location filename="../svcore/base/Preferences.cpp" line="330"/>
         <source>Show box for current pane only</source>
         <translation>Показывать панель только для активного окна</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="328"/>
+        <location filename="../svcore/base/Preferences.cpp" line="334"/>
         <source>Rectangular</source>
         <translation>Прямоугольная</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="329"/>
+        <location filename="../svcore/base/Preferences.cpp" line="335"/>
         <source>Triangular</source>
         <translation>Треугольная</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="330"/>
+        <location filename="../svcore/base/Preferences.cpp" line="336"/>
         <source>Hamming</source>
         <translation>Хамминга</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="332"/>
+        <location filename="../svcore/base/Preferences.cpp" line="338"/>
         <source>Blackman</source>
         <translation>Блэкмена</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="333"/>
+        <location filename="../svcore/base/Preferences.cpp" line="339"/>
         <source>Gaussian</source>
         <translation>Гауссова</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="334"/>
+        <location filename="../svcore/base/Preferences.cpp" line="340"/>
         <source>Parzen</source>
         <translation>Парзена</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="335"/>
+        <location filename="../svcore/base/Preferences.cpp" line="341"/>
         <source>Nuttall</source>
         <translation>Нутталла</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="336"/>
+        <location filename="../svcore/base/Preferences.cpp" line="342"/>
         <source>Blackman-Harris</source>
         <translation>Блэкмена-Харриса</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="380"/>
+        <location filename="../svcore/base/Preferences.cpp" line="386"/>
         <source>C0 - middle of octave scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="381"/>
+        <location filename="../svcore/base/Preferences.cpp" line="387"/>
         <source>C3 - common MIDI sequencer convention</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="382"/>
+        <location filename="../svcore/base/Preferences.cpp" line="388"/>
         <source>C4 - ASA American standard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="383"/>
+        <location filename="../svcore/base/Preferences.cpp" line="389"/>
         <source>C5 - used in Cakewalk and others</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="393"/>
+        <location filename="../svcore/base/Preferences.cpp" line="399"/>
         <source>Preferences</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="133"/>
+        <location filename="../svcore/base/Preferences.cpp" line="136"/>
         <source>Playback resampler type</source>
         <translation>Тип ресэмплирования при воспроизведении</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="341"/>
+        <location filename="../svcore/base/Preferences.cpp" line="347"/>
         <source>Fastest</source>
         <translation>Самый быстрый</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="342"/>
+        <location filename="../svcore/base/Preferences.cpp" line="348"/>
         <source>Standard</source>
         <translation>Обычный</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="343"/>
+        <location filename="../svcore/base/Preferences.cpp" line="349"/>
         <source>Highest quality</source>
         <translation>Наивысшего качества</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="118"/>
+        <location filename="../svcore/base/Preferences.cpp" line="121"/>
         <source>Spectrogram y-axis interpolation:</source>
         <translation>Интерполяция оси Y спектрограммы:</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="139"/>
+        <location filename="../svcore/base/Preferences.cpp" line="142"/>
         <source>Omit temporaries from Recent Files menu</source>
         <translation>Пропускать временные файлы в меню недавно открывавшихся</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="142"/>
+        <location filename="../svcore/base/Preferences.cpp" line="145"/>
         <source>Resample mismatching files on import</source>
         <translation>Ресэмплировать файлы при импорте</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="148"/>
+        <location filename="../svcore/base/Preferences.cpp" line="154"/>
         <source>Location for cache file directory</source>
         <translation>Расположение каталога с кэшем</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="151"/>
+        <location filename="../svcore/base/Preferences.cpp" line="157"/>
         <source>Background colour preference</source>
         <translation>Предпочитаемый цвет фона</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="163"/>
+        <location filename="../svcore/base/Preferences.cpp" line="169"/>
         <source>Font size for text overlays</source>
         <translation>Кегль шрифта для текстовых перекрытий</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="166"/>
+        <location filename="../svcore/base/Preferences.cpp" line="172"/>
         <source>Show splash screen on startup</source>
         <translation>Показывать заставку при старте программы</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="331"/>
+        <location filename="../svcore/base/Preferences.cpp" line="337"/>
         <source>Hann</source>
         <translation>Хэнна</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="362"/>
+        <location filename="../svcore/base/Preferences.cpp" line="368"/>
         <source>Follow desktop theme</source>
         <translation>Использовать параметры окружения</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="363"/>
+        <location filename="../svcore/base/Preferences.cpp" line="369"/>
         <source>Dark background</source>
         <translation>Темный фон</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="364"/>
+        <location filename="../svcore/base/Preferences.cpp" line="370"/>
         <source>Light background</source>
         <translation>Светлый фон</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="121"/>
+        <location filename="../svcore/base/Preferences.cpp" line="124"/>
         <source>Spectrogram x-axis interpolation:</source>
         <translation>Интерполяция спектрограммы по оси X:</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="348"/>
-        <location filename="../svcore/base/Preferences.cpp" line="356"/>
+        <location filename="../svcore/base/Preferences.cpp" line="354"/>
+        <location filename="../svcore/base/Preferences.cpp" line="362"/>
         <source>None</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="349"/>
-        <location filename="../svcore/base/Preferences.cpp" line="357"/>
+        <location filename="../svcore/base/Preferences.cpp" line="355"/>
+        <location filename="../svcore/base/Preferences.cpp" line="363"/>
         <source>Linear interpolation</source>
         <translation>Линейная интерполяция</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="350"/>
+        <location filename="../svcore/base/Preferences.cpp" line="356"/>
         <source>4 x Oversampling</source>
         <translation>4 × пересэмплированная</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="351"/>
+        <location filename="../svcore/base/Preferences.cpp" line="357"/>
         <source>4 x Oversampling with interpolation</source>
         <translation>4 × пересэмплированная с интерполяцией</translation>
     </message>
@@ -6249,37 +6780,37 @@
         <translation type="vanished">Формат отображения времени</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="369"/>
+        <location filename="../svcore/base/Preferences.cpp" line="375"/>
         <source>Standard (to millisecond)</source>
-        <translation>Обычный (до мс)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/base/Preferences.cpp" line="370"/>
+        <translation>Обычная (до мс)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/base/Preferences.cpp" line="376"/>
         <source>High resolution (to microsecond)</source>
         <translation>Высокое разрешение (до мкс)</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="371"/>
+        <location filename="../svcore/base/Preferences.cpp" line="377"/>
         <source>24 FPS</source>
         <translation>24 кадра/с</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="372"/>
+        <location filename="../svcore/base/Preferences.cpp" line="378"/>
         <source>25 FPS</source>
         <translation>25 кадров/с</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="373"/>
+        <location filename="../svcore/base/Preferences.cpp" line="379"/>
         <source>30 FPS</source>
         <translation>30 кадров/с</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="374"/>
+        <location filename="../svcore/base/Preferences.cpp" line="380"/>
         <source>50 FPS</source>
         <translation>50 кадров/с</translation>
     </message>
     <message>
-        <location filename="../svcore/base/Preferences.cpp" line="375"/>
+        <location filename="../svcore/base/Preferences.cpp" line="381"/>
         <source>60 FPS</source>
         <translation>60 кадров/с</translation>
     </message>
@@ -6287,145 +6818,206 @@
 <context>
     <name>PreferencesDialog</name>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="68"/>
+        <location filename="../main/PreferencesDialog.cpp" line="78"/>
         <source>Apply</source>
         <translation>Применить</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="348"/>
-        <location filename="../main/PreferencesDialog.cpp" line="352"/>
-        <location filename="../main/PreferencesDialog.cpp" line="356"/>
-        <location filename="../main/PreferencesDialog.cpp" line="363"/>
-        <location filename="../main/PreferencesDialog.cpp" line="371"/>
-        <location filename="../main/PreferencesDialog.cpp" line="388"/>
-        <location filename="../main/PreferencesDialog.cpp" line="400"/>
-        <location filename="../main/PreferencesDialog.cpp" line="418"/>
-        <location filename="../main/PreferencesDialog.cpp" line="424"/>
+        <location filename="../main/PreferencesDialog.cpp" line="407"/>
         <location filename="../main/PreferencesDialog.cpp" line="429"/>
-        <location filename="../main/PreferencesDialog.cpp" line="434"/>
-        <location filename="../main/PreferencesDialog.cpp" line="451"/>
-        <location filename="../main/PreferencesDialog.cpp" line="456"/>
-        <location filename="../main/PreferencesDialog.cpp" line="471"/>
+        <location filename="../main/PreferencesDialog.cpp" line="435"/>
+        <location filename="../main/PreferencesDialog.cpp" line="440"/>
+        <location filename="../main/PreferencesDialog.cpp" line="445"/>
+        <location filename="../main/PreferencesDialog.cpp" line="462"/>
+        <location filename="../main/PreferencesDialog.cpp" line="467"/>
+        <location filename="../main/PreferencesDialog.cpp" line="482"/>
+        <location filename="../main/PreferencesDialog.cpp" line="566"/>
+        <location filename="../main/PreferencesDialog.cpp" line="571"/>
+        <location filename="../main/PreferencesDialog.cpp" line="598"/>
+        <location filename="../main/PreferencesDialog.cpp" line="602"/>
+        <location filename="../main/PreferencesDialog.cpp" line="606"/>
+        <location filename="../main/PreferencesDialog.cpp" line="611"/>
         <source>%1:</source>
         <translation>%1:</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="405"/>
+        <location filename="../main/PreferencesDialog.cpp" line="412"/>
         <source>Default spectrogram colour:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="409"/>
+        <translation>Цвет спектрограммы по умолчанию:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="416"/>
         <source>Default melodic spectrogram colour:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="413"/>
+        <translation>Цвет спектрограммы мелодического диапазона по умолчанию:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="420"/>
         <source>Default colour 3D plot colour:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="531"/>
+        <translation>Цвет трёхмерного графика по умолчанию:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="621"/>
+        <source>&amp;Other</source>
+        <translation>&amp;Прочее</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="626"/>
         <source>OK</source>
         <translation>ОК</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="532"/>
+        <location filename="../main/PreferencesDialog.cpp" line="627"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="54"/>
+        <location filename="../main/PreferencesDialog.cpp" line="64"/>
         <source>Sonic Visualiser: Application Preferences</source>
-        <translation>Параметры работы Sonic Visualiser</translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="223"/>
+        <translation>Параметры Sonic Visualiser</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="152"/>
+        <source>Green</source>
+        <translation>Зелёный</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="239"/>
+        <location filename="../main/PreferencesDialog.cpp" line="665"/>
+        <location filename="../main/PreferencesDialog.cpp" line="680"/>
+        <source>(auto)</source>
+        <translation>(авто)</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="273"/>
         <source>&lt;home directory&gt;</source>
         <translation>&lt;домашний каталог&gt;</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="273"/>
+        <location filename="../main/PreferencesDialog.cpp" line="323"/>
         <source>Follow system locale</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="287"/>
+        <translation>Использовать системные настройки</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="337"/>
         <source>Russian</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="288"/>
+        <translation>Русский</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="338"/>
         <source>British English</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="289"/>
+        <translation>Английский (Великобритания)</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="339"/>
         <source>American English</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="290"/>
+        <translation>Английский (США)</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="340"/>
         <source>Czech</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="348"/>
+        <translation>Чешский</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="424"/>
+        <source>Overview waveform colour:</source>
+        <translation>Цвет миниатюры волнового сигнала:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="490"/>
+        <source>Run Vamp plugins in separate process:</source>
+        <translation>Запускать плагины VAMP отдельным процессом:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="506"/>
+        <source>Default session template when loading audio files:</source>
+        <translation>Шаблон сессии по умолчанию при загрузке аудиофайлов:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="513"/>
+        <source>(Use &quot;%1&quot; in the File menu to add to these.)</source>
+        <translation>Используйте команду «%1» в меню «Файл», чтобы создать новые шаблоны.</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="514"/>
+        <source>Export Session as Template...</source>
+        <translation>Экспортировать сессию как шаблон…</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="556"/>
+        <source>Audio service:</source>
+        <translation>Звуковой движок:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="560"/>
+        <source>Audio playback device:</source>
+        <translation>Устройство воспроизведения:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="563"/>
+        <source>Audio record device:</source>
+        <translation>Устройство записи:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="579"/>
+        <source>A&amp;udio I/O</source>
+        <translation>&amp;Звуковой вход/выход</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="589"/>
+        <source>&amp;Plugins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="598"/>
         <source>User interface language</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="352"/>
+        <translation>Язык интерфейса</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="602"/>
         <source>Allow network usage</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="379"/>
+        <translation>Разрешить выход в Сеть</translation>
+    </message>
+    <message>
         <source>&amp;General</source>
-        <translation>О&amp;бщие</translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="395"/>
+        <translation type="vanished">О&amp;бщие</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="402"/>
         <source>Draw layers at Retina resolution:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="490"/>
-        <source>Default session template for audio files:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="501"/>
+        <translation>Рисовать слои в разрешении Retina:</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="521"/>
         <source>Standard Waveform</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="526"/>
+        <translation>Обычная волновая форма сигнала</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="546"/>
         <source>Session &amp;Template</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../main/PreferencesDialog.cpp" line="685"/>
+        <translation>&amp;Шаблон сессий</translation>
+    </message>
+    <message>
+        <location filename="../main/PreferencesDialog.cpp" line="873"/>
         <source>Select a directory to create cache subdirectory in</source>
         <translation>Выберите каталог для хранения кэша</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="783"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1012"/>
         <source>Preferences</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="784"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1013"/>
         <source>&lt;b&gt;Restart required&lt;/b&gt;&lt;p&gt;One or more of the application preferences you have changed may not take full effect until Sonic Visualiser is restarted.&lt;/p&gt;&lt;p&gt;Please exit and restart the application now if you want these changes to take effect immediately.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Требуется перезапуск программы&lt;/b&gt;&lt;p&gt;Некоторые изменившиеся параметры не могут быть учтены без перезапуска Sonic Visualiser.&lt;/p&gt;&lt;p&gt;Завершите работу с программой и повторно запустите ее, чтобы внесенные изменения возымели эффект.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="805"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1046"/>
         <source>Preferences Changed</source>
         <translation>Параметры изменены</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="806"/>
+        <location filename="../main/PreferencesDialog.cpp" line="1047"/>
         <source>Some preferences have been changed but not applied.
 Apply them before closing?</source>
         <translation>Некоторые параметры работы программы 
@@ -6437,12 +7029,12 @@
         <translation type="vanished">Устройство воспроизведения:</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="442"/>
+        <location filename="../main/PreferencesDialog.cpp" line="453"/>
         <source>&amp;Appearance</source>
         <translation>Об&amp;лик</translation>
     </message>
     <message>
-        <location filename="../main/PreferencesDialog.cpp" line="481"/>
+        <location filename="../main/PreferencesDialog.cpp" line="497"/>
         <source>Anal&amp;ysis</source>
         <translation>&amp;Анализ</translation>
     </message>
@@ -6450,7 +7042,7 @@
 <context>
     <name>ProgressDialog</name>
     <message>
-        <location filename="../svgui/widgets/ProgressDialog.cpp" line="28"/>
+        <location filename="../svgui/widgets/ProgressDialog.cpp" line="31"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
@@ -6458,85 +7050,91 @@
 <context>
     <name>PropertyBox</name>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="160"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="219"/>
         <source>Show</source>
         <translation>Показать</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="177"/>
         <source>Play</source>
-        <translation>Воспроизвести</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="242"/>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="244"/>
+        <translation type="vanished">Воспроизвести</translation>
+    </message>
+    <message>
         <source>Playback Pan / Balance</source>
-        <translation>Панорама/баланс при воспроизведении</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="216"/>
+        <translation type="vanished">Панорама/баланс при воспроизведении</translation>
+    </message>
+    <message>
         <source>Playback Gain</source>
-        <translation>Усиление воспроизведения</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="218"/>
+        <translation type="vanished">Усиление воспроизведения</translation>
+    </message>
+    <message>
         <source>dB</source>
-        <translation>Дб</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="788"/>
+        <translation type="vanished">Дб</translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="169"/>
+        <source>Click to toggle playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="746"/>
         <source>Set playback clip:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="856"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="807"/>
+        <source>Adjust playback level and pan of %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="817"/>
+        <source>Change sound used for playback (currently &quot;%1&quot;)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="831"/>
         <source> (current value: %1%2)</source>
         <translation> (текущее значение: %1%2)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="858"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="833"/>
         <source> (current value: %1)</source>
         <translation> (текущее значение: %1)</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="863"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="838"/>
         <source>Toggle Visibility of %1</source>
         <translation>Переключить видимость %1</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="865"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="840"/>
         <source>Toggle Playback of %1</source>
         <translation>Переключить воспроизведение %1</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="869"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="844"/>
         <source>Toggle %1 property of %2</source>
         <translation>Переключить %1 свойство %2</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="872"/>
+        <location filename="../svgui/widgets/PropertyBox.cpp" line="847"/>
         <source>Adjust %1 property of %2%3</source>
         <translation>Скорректировать %1 свойство %2%3</translation>
     </message>
     <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="483"/>
         <source>Add New Colour...</source>
-        <translation>Добавить новый цвет...</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="674"/>
+        <translation type="vanished">Добавить новый цвет...</translation>
+    </message>
+    <message>
         <source>Name New Colour</source>
-        <translation>Дайте цвету название</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="675"/>
+        <translation type="vanished">Дайте цвету название</translation>
+    </message>
+    <message>
         <source>Enter a name for the new colour:</source>
-        <translation>Введите название нового цвета:</translation>
-    </message>
-    <message>
-        <location filename="../svgui/widgets/PropertyBox.cpp" line="677"/>
+        <translation type="vanished">Введите название нового цвета:</translation>
+    </message>
+    <message>
         <source>Prefer black background for this colour</source>
-        <translation>Предпочитать черный фон для этого цвета</translation>
+        <translation type="vanished">Предпочитать черный фон для этого цвета</translation>
     </message>
 </context>
 <context>
@@ -6572,7 +7170,7 @@
         <translation>ложь</translation>
     </message>
     <message>
-        <location filename="../svcore/base/PropertyContainer.cpp" line="250"/>
+        <location filename="../svcore/base/PropertyContainer.cpp" line="251"/>
         <source>Set %1 Property</source>
         <translation>Установить свойство %1</translation>
     </message>
@@ -6600,7 +7198,7 @@
 <context>
     <name>QApplication</name>
     <message>
-        <location filename="../main/main.cpp" line="260"/>
+        <location filename="../main/main.cpp" line="262"/>
         <source>
 Sonic Visualiser is a program for viewing and exploring audio data
 for semantic music analysis and annotation.
@@ -6627,7 +7225,7 @@
 </translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="270"/>
+        <location filename="../main/main.cpp" line="272"/>
         <source>Sonic Visualiser</source>
         <translation>Sonic Visualiser</translation>
     </message>
@@ -6635,13 +7233,13 @@
 <context>
     <name>QFile</name>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="52"/>
+        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="53"/>
         <location filename="../svcore/data/fileio/PlaylistFileReader.cpp" line="69"/>
         <source>File &quot;%1&quot; does not exist</source>
         <translation>Файл &quot;%1&quot; не существует</translation>
     </message>
     <message>
-        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="54"/>
+        <location filename="../svcore/data/fileio/CSVFileReader.cpp" line="55"/>
         <location filename="../svcore/data/fileio/PlaylistFileReader.cpp" line="72"/>
         <source>Failed to open file &quot;%1&quot;</source>
         <translation>Не удалось открыть файл &quot;%1&quot;</translation>
@@ -6656,18 +7254,18 @@
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../main/main.cpp" line="522"/>
-        <location filename="../main/main.cpp" line="527"/>
+        <location filename="../main/main.cpp" line="539"/>
+        <location filename="../main/main.cpp" line="544"/>
         <source>Failed to open file</source>
         <translation>Не удалось открыть файл</translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="523"/>
+        <location filename="../main/main.cpp" line="540"/>
         <source>File or URL &quot;%1&quot; could not be opened</source>
         <translation>Файл или URL &quot;%1&quot; не мог быть открыт</translation>
     </message>
     <message>
-        <location filename="../main/main.cpp" line="528"/>
+        <location filename="../main/main.cpp" line="545"/>
         <source>&lt;b&gt;Audio required&lt;/b&gt;&lt;p&gt;Please load at least one audio file before importing annotation data</source>
         <translation>&lt;b&gt;Нужны звуковые данные&lt;/b&gt;&lt;p&gt;Загрузите хотя бы один звуковой файл перед импортом аннотаций</translation>
     </message>
@@ -6675,38 +7273,122 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="164"/>
-        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;
-</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="170"/>
-        <source>Failed to load library</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="172"/>
-        <source>Failed to query plugins from library after loading</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="174"/>
-        <source>Unknown failure</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svcore/plugin/FeatureExtractionPluginFactory.cpp" line="176"/>
-        <source>Success: internal error?</source>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="92"/>
+        <source>External plugin host executable does not appear to be installed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="244"/>
+        <source>Could not start external plugin host</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="260"/>
+        <source>External plugin host exited unexpectedly while listing plugins</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PiperVampPluginFactory.cpp" line="264"/>
+        <source>External plugin host invocation failed: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="193"/>
+        <source>&lt;b&gt;Failed to scan for plugins&lt;/b&gt;&lt;p&gt;Failed to scan for plugins at startup. Possibly the plugin checker program was not correctly installed alongside %1?&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="200"/>
+        <source>&lt;b&gt;Did not scan for plugins&lt;/b&gt;&lt;p&gt;Apparently no scan for plugins was attempted (internal error?)&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="213"/>
+        <source>&lt;b&gt;Failed to load plugins&lt;/b&gt;&lt;p&gt;Failed to load one or more plugin libraries:&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Не удалось загрузить плагины&lt;/b&gt;&lt;p&gt;Не удалось загрузить одну или больше библиотек плагинов:&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../svcore/plugin/PluginScan.cpp" line="216"/>
+        <source>&lt;p&gt;These plugins may be incompatible with the system, and will be ignored during this run of %1.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Эти плагины могут быть несовместимы с программой и будут проигнорированы при работе в %1.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="89"/>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="107"/>
+        <source>&lt;unknown&gt;</source>
+        <translation type="unfinished">&lt;неизвестно&gt;</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="93"/>
+        <source>Green</source>
+        <translation>Зелёный</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="94"/>
+        <source>White on Black</source>
+        <translation>Белое на чёрном</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="95"/>
+        <source>Black on White</source>
+        <translation>Чёрное на белом</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="96"/>
+        <source>Cherry</source>
+        <translation>Вишня</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="97"/>
+        <source>Wasp</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="98"/>
+        <source>Ice</source>
+        <translation>Лёд</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="99"/>
+        <source>Sunset</source>
+        <translation>Закат</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="100"/>
+        <source>Fruit Salad</source>
+        <translation>Фруктовый салат</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="101"/>
+        <source>Banded</source>
+        <translation type="unfinished">В полоску</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="102"/>
+        <source>Highlight</source>
+        <translation type="unfinished">Подсветка</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="103"/>
+        <source>Printer</source>
+        <translation type="unfinished">Принтер</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/ColourMapper.cpp" line="104"/>
+        <source>High Gain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../main/MainWindow.cpp" line="2843"/>
+        <source>Exporting audio data...</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>QuickTimeFileReader</name>
     <message>
-        <location filename="../svcore/data/fileio/QuickTimeFileReader.cpp" line="226"/>
         <source>Decoding %1...</source>
-        <translation>Декодируется %1...</translation>
+        <translation type="vanished">Декодируется %1...</translation>
     </message>
 </context>
 <context>
@@ -6754,73 +7436,73 @@
 <context>
     <name>RegionLayer</name>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="100"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="101"/>
         <source>Vertical Scale</source>
         <translation>Верт. масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="101"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="102"/>
         <source>Scale Units</source>
         <translation>Единицы шкалы</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="102"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="103"/>
         <source>Plot Type</source>
         <translation>Тип графика</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="120"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="121"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="182"/>
         <source>Bars</source>
         <translation>Такты</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="183"/>
         <source>Segmentation</source>
         <translation>Сегментация</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="188"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="189"/>
         <source>Auto-Align</source>
         <translation>Автовыравнивание</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="189"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="190"/>
         <source>Equal Spaced</source>
         <translation>Равные промежутки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="190"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="191"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="191"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="192"/>
         <source>Log</source>
         <translation>Логарифмический</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="396"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="397"/>
         <source>In progress</source>
         <translation>В процессе</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="398"/>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="424"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="399"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="425"/>
         <source>No local points</source>
         <translation>Нет локальных точек</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="433"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="434"/>
         <source>%1 %2</source>
         <translation>%1 %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="438"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="439"/>
         <source>Time:	%1
 Value:	%2
 Duration:	%3
@@ -6831,7 +7513,7 @@
 Без метки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="443"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="444"/>
         <source>Time:	%1
 Value:	%2
 Duration:	%3
@@ -6842,69 +7524,69 @@
 Метка:	%4</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1307"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1308"/>
         <source>Change Point Value</source>
         <translation>Изменить значение точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1366"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1367"/>
         <source>Drag Selection</source>
         <translation>Перетащить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1392"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1393"/>
         <source>Resize Selection</source>
         <translation>Изменить размер выделения</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1432"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1433"/>
         <source>Delete Selected Points</source>
         <translation>Удалить выбранные точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1479"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1480"/>
         <source>Re-align pasted items?</source>
         <translation>Заново выровнять вставленные объекты?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1480"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1481"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1494"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1495"/>
         <source>Paste</source>
         <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="54"/>
         <location filename="../svgui/layer/RegionLayer.cpp" line="55"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="56"/>
         <source>New Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1139"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1140"/>
         <source>Draw Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1221"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1222"/>
         <source>Erase Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1281"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1282"/>
         <source>Drag Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1302"/>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1349"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1303"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1350"/>
         <source>Edit Region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/RegionLayer.cpp" line="1304"/>
+        <location filename="../svgui/layer/RegionLayer.cpp" line="1305"/>
         <source>Relocate Region</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6955,7 +7637,7 @@
 <context>
     <name>RemoveLayerCommand</name>
     <message>
-        <location filename="../svapp/framework/Document.cpp" line="1240"/>
+        <location filename="../svapp/framework/Document.cpp" line="1190"/>
         <source>Delete %1 Layer</source>
         <translation>Удалить слой %1 </translation>
     </message>
@@ -6976,7 +7658,7 @@
         <translation>(модель извлечена в SV-XML)</translation>
     </message>
     <message>
-        <location filename="../svapp/framework/SVFileReader.cpp" line="469"/>
+        <location filename="../svapp/framework/SVFileReader.cpp" line="467"/>
         <source>Opening file or URL...</source>
         <translation>Открывается файл или URL...</translation>
     </message>
@@ -6997,113 +7679,113 @@
 <context>
     <name>SliceLayer</name>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="146"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="153"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="154"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="161"/>
         <source>%1 - %2</source>
         <translation>%1 - %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="164"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="172"/>
         <source>First</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="165"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="720"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="760"/>
         <source>Mean</source>
         <translation type="unfinished">Усреднённо</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="165"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="721"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="173"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="761"/>
         <source>Peak</source>
         <translation>Пик</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="510"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="529"/>
         <source>0dB</source>
         <translation>0 Дб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="511"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="530"/>
         <source>-Inf</source>
         <translation>-Inf</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="542"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="571"/>
         <source>x10</source>
         <translation>x10</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="567"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="607"/>
         <source>Plot Type</source>
         <translation>Тип графика</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="568"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="605"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="608"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="645"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="569"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="609"/>
         <source>Normalize</source>
         <translation>Нормализовать</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="571"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="611"/>
         <source>Gain</source>
         <translation>Усиление</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="572"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="612"/>
         <source>Sampling Mode</source>
         <translation>Режим сэмплирования</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="710"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="736"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="750"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="776"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="711"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="751"/>
         <source>Meter</source>
         <translation>Счетчик</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="748"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="751"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="788"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="791"/>
         <source>dB</source>
         <translation>Дб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="719"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="759"/>
         <source>Any</source>
         <translation>Любые</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="727"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="767"/>
         <source>Lines</source>
         <translation>Линии</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="728"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="768"/>
         <source>Steps</source>
         <translation>Шаги</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="729"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="769"/>
         <source>Blocks</source>
         <translation>Блоки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="730"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="770"/>
         <source>Colours</source>
         <translation>Цвета</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="158"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="166"/>
         <source>Time:	%1 - %2
 Range:	%3 samples (%4)
 Bin:	%5
@@ -7114,40 +7796,40 @@
 %6 значение:	%7</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="172"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="180"/>
         <source>Time:	%1 - %2
 Range:	%3 samples (%4)</source>
         <translation>Время:	%1 - %2
 Диапазон:	%3 сэмплов (%4)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="570"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="610"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="573"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="613"/>
         <source>Bin Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="607"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="647"/>
         <source>Bins</source>
         <translation type="unfinished">Бины</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="712"/>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="737"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="752"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="777"/>
         <source>Log</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="713"/>
+        <translation>Логарифм.</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="753"/>
         <source>Absolute</source>
         <translation type="unfinished">Абсолютный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SliceLayer.cpp" line="738"/>
+        <location filename="../svgui/layer/SliceLayer.cpp" line="778"/>
         <source>Rev Log</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7167,22 +7849,22 @@
         <translation type="obsolete">Переразметить точку</translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="153"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="163"/>
         <source>Sparse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="355"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="370"/>
         <source>Edit Data</source>
         <translation type="unfinished">Изменить данные</translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="371"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="386"/>
         <source>Insert Data Point</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="384"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="399"/>
         <source>Delete Data Point</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7190,7 +7872,7 @@
 <context>
     <name>SparseModel::AddPointCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="204"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="214"/>
         <source>Add Point</source>
         <translation type="unfinished">Добавить точку</translation>
     </message>
@@ -7198,7 +7880,7 @@
 <context>
     <name>SparseModel::DeletePointCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="229"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="239"/>
         <source>Delete Point</source>
         <translation type="unfinished">Удалить точку</translation>
     </message>
@@ -7206,7 +7888,7 @@
 <context>
     <name>SparseModel::RelabelCommand</name>
     <message>
-        <location filename="../svcore/data/model/SparseModel.h" line="286"/>
+        <location filename="../svcore/data/model/SparseModel.h" line="296"/>
         <source>Re-Label Point</source>
         <translation type="unfinished">Переразметить точку</translation>
     </message>
@@ -7293,18 +7975,18 @@
 <context>
     <name>SpectrogramLayer</name>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="177"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="219"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="252"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="292"/>
         <source>Colour</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="178"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="253"/>
         <source>Colour Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="179"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="254"/>
         <source>Window Size</source>
         <translation>Размер окна</translation>
     </message>
@@ -7313,234 +7995,249 @@
         <translation type="vanished">Нормализовать столбцы</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="182"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="257"/>
         <source>Bin Display</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="183"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="258"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="184"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="259"/>
         <source>Gain</source>
         <translation>Усиление</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="185"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="260"/>
         <source>Colour Rotation</source>
         <translation>Вращение цвета</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="186"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="261"/>
         <source>Min Frequency</source>
         <translation>Мин. частота</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="187"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="262"/>
         <source>Max Frequency</source>
         <translation>Макс. частота</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="188"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="263"/>
         <source>Frequency Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="216"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="289"/>
         <source>Window</source>
         <translation>Окно</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="222"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="295"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="389"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="450"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="456"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="520"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="390"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="457"/>
         <source>Meter</source>
         <translation>Счетчик</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="485"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="488"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="555"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="558"/>
         <source>dB</source>
         <translation>Дб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="393"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="460"/>
         <source>Phase</source>
         <translation>Фаза</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="181"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="256"/>
         <source>Normalization</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="420"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="467"/>
+        <source>Col</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="468"/>
+        <source>View</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="469"/>
+        <source>Hybrid</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="490"/>
         <source>No min</source>
         <translation>Без минимума</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="421"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="491"/>
         <source>10 Hz</source>
         <translation>10 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="422"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="492"/>
         <source>20 Hz</source>
         <translation>20 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="423"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="493"/>
         <source>40 Hz</source>
         <translation>40 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="424"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="494"/>
         <source>100 Hz</source>
         <translation>100 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="425"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="495"/>
         <source>250 Hz</source>
         <translation>250 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="426"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="435"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="496"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="505"/>
         <source>500 Hz</source>
         <translation>500 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="427"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="436"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="497"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="506"/>
         <source>1 KHz</source>
         <translation>1 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="428"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="439"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="498"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="509"/>
         <source>4 KHz</source>
         <translation>4 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="429"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="499"/>
         <source>10 KHz</source>
         <translation>10 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="437"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="507"/>
         <source>1.5 KHz</source>
         <translation>1,5 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="438"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="508"/>
         <source>2 KHz</source>
         <translation>2 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="440"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="510"/>
         <source>6 KHz</source>
         <translation>6 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="441"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="511"/>
         <source>8 KHz</source>
         <translation>8 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="442"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="512"/>
         <source>12 KHz</source>
         <translation>12 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="443"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="513"/>
         <source>16 KHz</source>
         <translation>16 КГц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="444"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="514"/>
         <source>No max</source>
         <translation>Без максимума</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="451"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="521"/>
         <source>Log</source>
         <translation>Логарифм.</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="457"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="527"/>
         <source>All Bins</source>
         <translation>Все бины</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="458"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="528"/>
         <source>Peak Bins</source>
         <translation>Пиковые бины</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="459"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="529"/>
         <source>Frequencies</source>
         <translation>Частоты</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="462"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="532"/>
         <source>&lt;unknown&gt;</source>
         <translation>&lt;неизвестно&gt;</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2968"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1952"/>
         <source>Peak Frequency:	%1 - %2 Hz
 </source>
         <translation>Пиковая частота:	%1 - %2 Гц
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2971"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1955"/>
         <source>Peak Frequency:	%1 Hz
 </source>
         <translation>Пиковая частота:	%1 Гц
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2979"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1963"/>
         <source>Peak Pitch:	%3 - %4
 </source>
         <translation>Пиковая высота тона:	%3 - %4
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2981"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1965"/>
         <source>Peak Pitch:	%2
 </source>
         <translation>Пиковая высота тона:	%2
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2992"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1976"/>
         <source>Time:	%1 - %2
 </source>
         <translation>Время:	%1 - %2
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2996"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1980"/>
         <source>Time:	%1
 </source>
         <translation>Время:	%1
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3001"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1985"/>
         <source>%1Bin Frequency:	%2 - %3 Hz
 %4Bin Pitch:	%5 - %6
 </source>
@@ -7549,7 +8246,7 @@
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3009"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1993"/>
         <source>%1Bin Frequency:	%2 Hz
 %3Bin Pitch:	%4
 </source>
@@ -7558,73 +8255,66 @@
 </translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3022"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3027"/>
         <source>-Inf</source>
-        <translation>-Inf</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3032"/>
+        <translation type="vanished">-Inf</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2016"/>
         <source>dB:	%1 - %2</source>
         <translation>Дб:	%1 - %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3034"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2018"/>
         <source>dB:	%1</source>
         <translation>Дб:	%1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3037"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2021"/>
         <source>
 Phase:	%1 - %2</source>
         <translation>
 Фаза:	%1 - %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3039"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2023"/>
         <source>
 Phase:	%1</source>
         <translation>
 Фаза:	%1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="180"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="255"/>
         <source>Window Overlap</source>
         <translation>Перекрытие окон</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="189"/>
-        <source>Smoothing</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="405"/>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="414"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="466"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="479"/>
         <source>None</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="406"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="480"/>
         <source>25 %</source>
         <translation>25 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="407"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="481"/>
         <source>50 %</source>
         <translation>50 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="408"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="482"/>
         <source>75 %</source>
         <translation>75 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="409"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="483"/>
         <source>87.5 %</source>
         <translation>87,5 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="410"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="484"/>
         <source>93.75 %</source>
         <translation>93,75 %</translation>
     </message>
@@ -7633,39 +8323,39 @@
         <translation type="vanished">Нормализовать видимую область</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="213"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="287"/>
         <source>Bins</source>
         <translation>Бины</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1492"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1383"/>
         <source>FFT cache failed</source>
         <translation>Не удалось кэшировать FFT</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1493"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="1384"/>
         <source>Failed to create the FFT model for this spectrogram.
 There may be insufficient memory or disc space to continue.</source>
         <translation>Не удалось создать FFT-модель этой спектрограммы.
 Вероятно, не хватает памяти или дискового порстранства для продолжения.</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="391"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="458"/>
         <source>dBV^2</source>
         <translation>ДбВ^2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="392"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="459"/>
         <source>dBV</source>
         <translation>ДбВ</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3069"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2053"/>
         <source>43Hz</source>
         <translation>43 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="3216"/>
+        <location filename="../svgui/layer/SpectrogramLayer.cpp" line="2126"/>
         <source>%1Hz</source>
         <translation>%1 Гц</translation>
     </message>
@@ -7673,90 +8363,93 @@
 <context>
     <name>SpectrumLayer</name>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="140"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="145"/>
         <source>Window Size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="141"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="146"/>
         <source>Window Overlap</source>
         <translation>Перекрытие окон</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="166"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="171"/>
         <source>Window</source>
         <translation>Окно</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="631"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="573"/>
         <source>Mean</source>
         <translation type="unfinished">Усреднённо</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="222"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="227"/>
         <source>None</source>
         <translation>Ничего</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="167"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="172"/>
         <source>Bins</source>
         <translation type="unfinished">Бины</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="223"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="228"/>
         <source>25 %</source>
         <translation>25 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="224"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="229"/>
         <source>50 %</source>
         <translation>50 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="225"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="230"/>
         <source>75 %</source>
         <translation>75 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="226"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="231"/>
         <source>87.5 %</source>
         <translation>87,5 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="227"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="232"/>
         <source>93.75 %</source>
         <translation>93,75 %</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="585"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="597"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="618"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="527"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="539"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="560"/>
         <source>%1 - %2</source>
         <translation>%1 - %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="590"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="532"/>
         <source>%1 - %2 Hz</source>
         <translation>%1 - %2 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="592"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="534"/>
         <source>%1 Hz</source>
         <translation>%1 Гц</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="608"/>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="613"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="721"/>
+        <source>Hz</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>-Inf</source>
-        <translation>-Inf</translation>
-    </message>
-    <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="620"/>
+        <translation type="vanished">-Inf</translation>
+    </message>
+    <message>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="562"/>
         <source>%1</source>
         <translation>%1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="626"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="568"/>
         <source>%1
 Bin:	%2 (%3)
 %4 value:	%5
@@ -7767,17 +8460,17 @@
 Дб:	%6</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="630"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="572"/>
         <source>First</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="631"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="573"/>
         <source>Peak</source>
         <translation>Пик</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="635"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="577"/>
         <source>%1
 Bin:	%2 (%3)
 Value:	%4
@@ -7788,7 +8481,7 @@
 Дб:	%5</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/SpectrumLayer.cpp" line="142"/>
+        <location filename="../svgui/layer/SpectrumLayer.cpp" line="147"/>
         <source>Show Peak Frequencies</source>
         <translation>Показывать пиковые частоты</translation>
     </message>
@@ -8000,107 +8693,107 @@
 <context>
     <name>TimeInstantLayer</name>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="44"/>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="481"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="46"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="485"/>
         <source>New Point</source>
         <translation>Новая точка</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="84"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="86"/>
         <source>Plot Type</source>
         <translation>Тип графика</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="124"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="126"/>
         <source>Instants</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="125"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="127"/>
         <source>Segmentation</source>
         <translation>Сегментация</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="226"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="228"/>
         <source>In progress</source>
         <translation>В процессе</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="228"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="230"/>
         <source>No local points</source>
         <translation>Нет локальных точек</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="239"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="241"/>
         <source>Time:	%1
 No label</source>
         <translation>Время:	%1
 Без метки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="242"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="244"/>
         <source>Time:	%1
 Label:	%2</source>
         <translation>Время:	%1
 Метка:	%2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="485"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="489"/>
         <source>Draw Point</source>
         <translation>Нарисовать точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="515"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="519"/>
         <source>Add Point at %1 s</source>
         <translation>Добавить точку в %1 с</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="606"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="610"/>
         <source>Drag Point</source>
         <translation>Перетащить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="622"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="626"/>
         <source>Move Point to %1 s</source>
         <translation>Перетащить точку к %1 с</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="658"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="662"/>
         <source>Edit Point</source>
         <translation>Изменить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="675"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="679"/>
         <source>Drag Selection</source>
         <translation>Перетащить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="701"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="705"/>
         <source>Resize Selection</source>
         <translation>Изменить размер выделения</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="736"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="740"/>
         <source>Delete Selection</source>
         <translation>Удалить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="794"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="798"/>
         <source>Paste</source>
         <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="560"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="564"/>
         <source>Erase Point</source>
         <translation>Удалить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="779"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="783"/>
         <source>Re-align pasted instants?</source>
         <translation>Заново выровнять вставленные объекты?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="780"/>
+        <location filename="../svgui/layer/TimeInstantLayer.cpp" line="784"/>
         <source>The instants you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8108,80 +8801,80 @@
 <context>
     <name>TimeValueLayer</name>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="58"/>
         <location filename="../svgui/layer/TimeValueLayer.cpp" line="59"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1351"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="60"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1345"/>
         <source>New Point</source>
         <translation>Новая точка</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="112"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="148"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="113"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="149"/>
         <source>Plot Type</source>
         <translation>Тип графика</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="113"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="114"/>
         <source>Vertical Scale</source>
         <translation>Верт. масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="114"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="115"/>
         <source>Scale Units</source>
         <translation>Единицы шкалы</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="116"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="117"/>
         <source>Show Derivative</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="229"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="230"/>
         <source>Points</source>
         <translation>Точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="230"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="231"/>
         <source>Stems</source>
         <translation>Ножки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="231"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="232"/>
         <source>Connected Points</source>
         <translation>Соединённые точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="232"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="233"/>
         <source>Lines</source>
         <translation>Линии</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="233"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="234"/>
         <source>Curve</source>
         <translation>Кривая</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="234"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="235"/>
         <source>Segmentation</source>
         <translation>Сегментация</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="235"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="236"/>
         <source>Discrete Curves</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="240"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="241"/>
         <source>Auto-Align</source>
         <translation>Автовыравнивание</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="600"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="601"/>
         <source>In progress</source>
         <translation>В процессе</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="602"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="603"/>
         <source>No local points</source>
         <translation>Нет локальных точек</translation>
     </message>
@@ -8202,111 +8895,111 @@
 Метка:	%4</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1358"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1352"/>
         <source>Draw Point</source>
         <translation>Нарисовать точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1525"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1519"/>
         <source>Drag Point</source>
         <translation>Перетащить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1548"/>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1593"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1542"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1587"/>
         <source>Edit Point</source>
         <translation>Изменить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1550"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1544"/>
         <source>Relocate Point</source>
         <translation>Переместить точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1553"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1547"/>
         <source>Change Point Value</source>
         <translation>Изменить значение точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1610"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1604"/>
         <source>Drag Selection</source>
         <translation>Перетащить выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1636"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1630"/>
         <source>Resize Selection</source>
         <translation>Изменить размер выделения</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1671"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1665"/>
         <source>Delete Selected Points</source>
         <translation>Удалить выбранные точки</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1733"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1727"/>
         <source>Paste</source>
         <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1788"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1782"/>
         <source>The items you are pasting do not have values.
 What values do you want to use for these items?</source>
         <translation>У вставляемых объектов нет значений.
 Какие значения вы хотите для них использовать?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1790"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1784"/>
         <source>Some of the items you are pasting do not have values.
 What values do you want to use for these items?</source>
         <translation>У некоторых вставляемых объектов нет значений.Какие значения вы хотите для них использовать?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1800"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1794"/>
         <source>Zero for all items</source>
         <translation>Ноль для всех объектов</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1809"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1803"/>
         <source>Choose value calculation</source>
         <translation>Выбрать вычисление значения</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="144"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="145"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="241"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="242"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="242"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="243"/>
         <source>Log</source>
         <translation>Логарифмический</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="243"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="244"/>
         <source>+/-1</source>
         <translation>+/-1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="615"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="616"/>
         <source>%1 Hz (%2, %3)</source>
         <translation type="unfinished">%1Гц (%2, %3)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="620"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="621"/>
         <source>%1 %2</source>
         <translation type="unfinished">%1 %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="622"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="623"/>
         <source>%1</source>
         <translation type="unfinished">%1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="628"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="629"/>
         <source>Time:	%1
 Value:	%2
 No label</source>
@@ -8317,7 +9010,7 @@
 ?}</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="632"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="633"/>
         <source>Time:	%1
 Value:	%2
 Label:	%4</source>
@@ -8328,32 +9021,32 @@
 ?}</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1476"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1470"/>
         <source>Erase Point</source>
         <translation>Стереть точку</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1718"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1712"/>
         <source>Re-align pasted items?</source>
         <translation type="unfinished">Заново выровнять вставленные объекты?</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1719"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1713"/>
         <source>The items you are pasting came from a layer with different source material from this one.  Do you want to re-align them in time, to match the source material for this layer?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1833"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1827"/>
         <source>Select cycle size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1834"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="1828"/>
         <source>Cycle size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/layer/TimeValueLayer.cpp" line="115"/>
+        <location filename="../svgui/layer/TimeValueLayer.cpp" line="116"/>
         <source>Draw Segment Division Lines</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8389,136 +9082,141 @@
 <context>
     <name>TransformFactory</name>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="567"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="720"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="552"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="705"/>
         <source>%1: %2</source>
         <translation>%1: %2</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="577"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="562"/>
         <source>%1: Output %2</source>
         <translation>%1: Выход %2</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="320"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="321"/>
         <source>Analysis</source>
         <translation>Анализ</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="322"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="323"/>
         <source>Effects Data</source>
         <translation>Данные эффектов</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="321"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="322"/>
         <source>Effects</source>
         <translation>Эффекты</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="386"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="387"/>
         <source> [\(&lt;].*$</source>
         <translation> [\(&lt;].*$</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="457"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="551"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="412"/>
+        <source>Failed to list Vamp plugins: %1</source>
+        <translation>Не удалось перечислить плагины VAMP: %1</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="445"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="536"/>
         <source>&lt;unknown maker&gt;</source>
         <translation>&lt;неизвестный производитель&gt;</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="463"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="727"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="451"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="712"/>
         <source>Extract features using &quot;%1&quot; plugin (from %2)</source>
-        <translation>Извлечь данные при помощи &quot;%1&quot; (из %2)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="466"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="730"/>
+        <translation>Извлечь данные при помощи плагина &quot;%1&quot; (из %2)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="454"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="715"/>
         <source>Extract features using &quot;%1&quot; output of &quot;%2&quot; plugin (from %3)</source>
-        <translation>Извлечь данные при помощи &quot;%1&quot; вывода из расширения &quot;%2&quot; (из %3)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="471"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="735"/>
+        <translation>Извлечь данные при помощи &quot;%1&quot; вывода из плагина &quot;%2&quot; (из %3)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="459"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="720"/>
         <source>%1 using &quot;%2&quot; plugin (from %3)</source>
-        <translation>%1 используя расширение &quot;%2&quot; (из %3)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="474"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="738"/>
+        <translation>%1 используя плагин &quot;%2&quot; (из %3)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="462"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="723"/>
         <source>%1 using &quot;%2&quot; output of &quot;%3&quot; plugin (from %4)</source>
-        <translation>%1 используя вывод &quot;%2&quot; расширения &quot;%3&quot; (из %4)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="589"/>
+        <translation>%1 используя вывод &quot;%2&quot; плагина &quot;%3&quot; (из %4)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="574"/>
         <source>Extract &quot;%1&quot; data output from &quot;%2&quot; effect plugin (from %3)</source>
-        <translation>Извлечь &quot;%1&quot; данные вывода из расширения эффектов &quot;%2&quot; (из %3)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="594"/>
+        <translation>Извлечь &quot;%1&quot; данные вывода из плагина эффектов &quot;%2&quot; (из %3)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="579"/>
         <source>Extract data output %1 from &quot;%2&quot; effect plugin (from %3)</source>
-        <translation>Извлечь данные вывода %1 из расширения эффектов &quot;%2&quot; (из %3)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="621"/>
+        <translation>Извлечь данные вывода %1 из плагина эффектов &quot;%2&quot; (из %3)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="606"/>
         <source>Transform audio signal with &quot;%1&quot; effect plugin (from %2)</source>
-        <translation>Трансформировать звуковой сигнал расширением эффектов &quot;%1&quot; (из %2)</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="627"/>
+        <translation>Трансформировать звуковой сигнал плагином эффектов &quot;%1&quot; (из %2)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="612"/>
         <source>Generate audio signal using &quot;%1&quot; plugin (from %2)</source>
-        <translation>Создать звуковой сигнал при помощи расширения &quot;%1&quot; (из %2)</translation>
+        <translation>Создать звуковой сигнал при помощи плагина &quot;%1&quot; (из %2)</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1153"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1191"/>
+        <source>Plugin type</source>
+        <translation>Тип плагина</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1155"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1193"/>
+        <source>Category</source>
+        <translation>Категория</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1156"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1194"/>
+        <source>System Identifier</source>
+        <translation>Системный идентификатор</translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1157"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1195"/>
-        <source>Plugin type</source>
-        <translation>Тип расширения</translation>
+        <source>Name</source>
+        <translation>Название</translation>
+    </message>
+    <message>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1158"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="1196"/>
+        <source>Description</source>
+        <translation>Описание</translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1159"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1197"/>
-        <source>Category</source>
-        <translation>Категория</translation>
+        <source>Maker</source>
+        <translation>Создатель</translation>
     </message>
     <message>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1160"/>
         <location filename="../svcore/transform/TransformFactory.cpp" line="1198"/>
-        <source>System Identifier</source>
-        <translation>Системный идентификатор</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1161"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1199"/>
-        <source>Name</source>
-        <translation>Название</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1162"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1200"/>
-        <source>Description</source>
-        <translation>Описание</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1163"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1201"/>
-        <source>Maker</source>
-        <translation>Создатель</translation>
-    </message>
-    <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1164"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="1202"/>
         <source>Units</source>
         <translation>Единица измерения</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="323"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="324"/>
         <source>Generator</source>
         <translation>Генератор</translation>
     </message>
     <message>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="324"/>
-        <location filename="../svcore/transform/TransformFactory.cpp" line="326"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="325"/>
+        <location filename="../svcore/transform/TransformFactory.cpp" line="327"/>
         <source>Other</source>
         <translation>Прочее</translation>
     </message>
@@ -8528,7 +9226,7 @@
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="38"/>
         <source>Find a Transform</source>
-        <translation>Поиск расширений для трансформации</translation>
+        <translation>Поиск плагинов для трансформации</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="44"/>
@@ -8605,7 +9303,7 @@
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="290"/>
         <source>&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;mdash; Plugin type: %1</source>
-        <translation>&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;mdash; Тип расширения: %1</translation>
+        <translation>&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;mdash; Тип плагина: %1</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="294"/>
@@ -8625,7 +9323,7 @@
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="137"/>
         <source>&lt;p&gt;Type some text into the search box to search the descriptions of:&lt;ul&gt;&lt;li&gt;All currently installed &lt;a href=&quot;http://www.vamp-plugins.org/&quot;&gt;Vamp&lt;/a&gt; audio feature extraction plugins&lt;/li&gt;&lt;li&gt;All currently installed &lt;a href=&quot;http://www.ladspa.org/&quot;&gt;LADSPA&lt;/a&gt; audio effects plugins&lt;/li&gt;&lt;li&gt;Vamp plugins that are not currently installed but that have descriptions published via the semantic web&lt;/li&gt;&lt;/ul&gt;</source>
-        <translation>&lt;p&gt;Введите текст для поиска по описаниям среди:&lt;ul&gt;&lt;li&gt;всех установленных расширений &lt;a href=&quot;http://www.vamp-plugins.org/&quot;&gt;Vamp&lt;/a&gt; для извлечения анализируемых данных;&lt;/li&gt;&lt;li&gt;всех установленных эффектов&lt;a href=&quot;http://www.ladspa.org/&quot;&gt;LADSPA&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;еще не установленных расширений Vamp, чьё описание опубликовано в семантической сети.&lt;/li&gt;&lt;/ul&gt;</translation>
+        <translation>&lt;p&gt;Введите текст для поиска по описаниям среди:&lt;ul&gt;&lt;li&gt;всех установленных плагинов &lt;a href=&quot;http://www.vamp-plugins.org/&quot;&gt;VAMP&lt;/a&gt; для извлечения анализируемых данных;&lt;/li&gt;&lt;li&gt;всех установленных плагинов &lt;a href=&quot;http://www.ladspa.org/&quot;&gt;LADSPA&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;еще не установленных плагинов VAMP, чьё описание опубликовано в семантической сети.&lt;/li&gt;&lt;/ul&gt;</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="140"/>
@@ -8635,17 +9333,17 @@
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="143"/>
         <source>&lt;b&gt;No plugins are currently installed!&lt;/b&gt;</source>
-        <translation>&lt;b&gt;Ни одно расширение не установлено!&lt;/b&gt;</translation>
+        <translation>&lt;b&gt;Ни один плагин не установлен!&lt;/b&gt;</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="151"/>
         <source>&lt;p&gt;%1&lt;br&gt;Perhaps the network connection is down, services are responding too slowly, or a processing problem has occurred.&lt;br&gt;Only the descriptions of installed plugins will be searched.</source>
-        <translation>&lt;p&gt;%1&lt;br&gt;Вероятно, не работает сетевое соединение, либо службы отзываются слишком медленно, либо произошла неполадка при обработке.&lt;br&gt;Будет выполнен поиск только по описаниям уже установленных расширений.</translation>
+        <translation>&lt;p&gt;%1&lt;br&gt;Вероятно, не работает сетевое соединение, либо службы отзываются слишком медленно, либо произошла неполадка при обработке.&lt;br&gt;Будет выполнен поиск только по описаниям уже установленных плагинов.</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="157"/>
         <source>&lt;p&gt;%1&lt;br&gt;Only the published descriptions of Vamp feature extraction plugins will be searched.</source>
-        <translation>&lt;p&gt;%1&lt;br&gt;Выдет выполнен поиск только по описаниям расширений Vamp, предназначенных для извлечения анализируемых данных.</translation>
+        <translation>&lt;p&gt;%1&lt;br&gt;Выдет выполнен поиск только по описаниям плагинов VAMP, предназначенных для извлечения анализируемых данных.</translation>
     </message>
     <message>
         <location filename="../svgui/widgets/TransformFinder.cpp" line="161"/>
@@ -8726,63 +9424,68 @@
 <context>
     <name>View</name>
     <message>
-        <location filename="../svgui/view/View.cpp" line="96"/>
+        <location filename="../svgui/view/View.cpp" line="100"/>
         <source>Global Scroll</source>
         <translation>Глобальная прокрутка</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="97"/>
+        <location filename="../svgui/view/View.cpp" line="101"/>
         <source>Global Zoom</source>
         <translation>Глобальный масштаб</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="98"/>
+        <location filename="../svgui/view/View.cpp" line="102"/>
         <source>Follow Playback</source>
         <translation>Следовать за воспроизведением</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="141"/>
+        <location filename="../svgui/view/View.cpp" line="145"/>
         <source>Scroll</source>
         <translation>Прокручивать</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="142"/>
+        <location filename="../svgui/view/View.cpp" line="146"/>
         <source>Page</source>
         <translation>Постранично</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="143"/>
+        <location filename="../svgui/view/View.cpp" line="147"/>
         <source>Off</source>
         <translation>Выключить</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="146"/>
+        <location filename="../svgui/view/View.cpp" line="150"/>
         <source>&lt;unknown&gt;</source>
         <translation>&lt;неизвестно&gt;</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="1581"/>
+        <location filename="../svgui/view/View.cpp" line="1535"/>
         <source>Layer rendering error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2427"/>
+        <location filename="../svgui/view/View.cpp" line="2391"/>
         <source>Waiting for layers to be ready...</source>
         <translation>Ожидание готовности слоёв...</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2428"/>
-        <location filename="../svgui/view/View.cpp" line="2457"/>
+        <location filename="../svgui/view/View.cpp" line="2392"/>
+        <location filename="../svgui/view/View.cpp" line="2421"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="2456"/>
+        <location filename="../svgui/view/View.cpp" line="2420"/>
         <source>Rendering image...</source>
         <translation>Отрисовывается изображение...</translation>
     </message>
     <message>
-        <location filename="../svgui/view/View.cpp" line="1603"/>
+        <location filename="../svgui/view/View.cpp" line="2537"/>
+        <source>Exported image from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../svgui/view/View.cpp" line="1557"/>
         <source>Alignment</source>
         <translation>Выравнивание</translation>
     </message>
@@ -8790,102 +9493,102 @@
 <context>
     <name>ViewManager</name>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="371"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="388"/>
         <source>Clear Selection</source>
         <translation type="unfinished">Снять выделение</translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="372"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="389"/>
         <source>Select Multiple Regions</source>
         <translation type="unfinished">Выделить несколько областей</translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="373"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="390"/>
         <source>Select Region</source>
         <translation type="unfinished">Выделить область</translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="390"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="407"/>
         <source>Enter Navigate mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="391"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="408"/>
         <source>Enter Select mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="392"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="409"/>
         <source>Enter Edit mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="393"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="410"/>
         <source>Enter Draw mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="394"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="411"/>
         <source>Enter Erase mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="395"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="412"/>
         <source>Enter Measure mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="396"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="413"/>
         <source>Enter NoteEdit mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="432"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="449"/>
         <source>Switch on Loop mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="433"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="450"/>
         <source>Switch off Loop mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="447"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="464"/>
         <source>Switch on Play Selection mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="448"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="465"/>
         <source>Switch off Play Selection mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="462"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="479"/>
         <source>Switch on Play Solo mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="463"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="480"/>
         <source>Switch off Play Solo mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="477"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="494"/>
         <source>Switch on Alignment mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="478"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="495"/>
         <source>Switch off Alignment mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="581"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="643"/>
         <source>Scroll to %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../svgui/view/ViewManager.cpp" line="642"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="712"/>
         <source>Zoom to %n sample(s) per pixel</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8894,7 +9597,7 @@
         </translation>
     </message>
     <message>
-        <location filename="../svgui/view/ViewManager.cpp" line="652"/>
+        <location filename="../svgui/view/ViewManager.cpp" line="722"/>
         <source>Change overlay level</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8924,120 +9627,117 @@
 <context>
     <name>WaveformLayer</name>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="106"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="135"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="109"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="138"/>
         <source>Scale</source>
         <translation>Масштаб по Y</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="107"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="110"/>
         <source>Gain</source>
         <translation>Усиление</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="108"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="111"/>
         <source>Normalize Visible Area</source>
         <translation>Нормализовать видимую область</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="109"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="112"/>
         <source>Channels</source>
         <translation>Каналы</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="196"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="199"/>
         <source>Linear</source>
         <translation>Линейный</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="197"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="200"/>
         <source>Meter</source>
         <translation>Счетчик</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="198"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="216"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="201"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="219"/>
         <source>dB</source>
         <translation>Дб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="204"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="207"/>
         <source>Separate</source>
         <translation>Отдельно</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="205"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="208"/>
         <source>Mean</source>
         <translation>Усреднённо</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="206"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="209"/>
         <source>Butterfly</source>
         <translation>V-образно</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="981"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="984"/>
         <source>Time:	%1 - %2</source>
         <translation>Время:	%1 - %2</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="985"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="988"/>
         <source>Time:	%1</source>
         <translation>Время:	%1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1006"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1009"/>
         <source>Level:</source>
         <translation>Уровень:</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1008"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1011"/>
         <source>Left:</source>
         <translation>Левый:</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1009"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1012"/>
         <source>Right:</source>
         <translation>Правый:</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1010"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1013"/>
         <source>Channel %1</source>
         <translation>Канал %1</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1033"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1036"/>
         <source>
 %1	%2 - %3 (%4 dB peak)</source>
         <translation>
 %1	%2 - %3 (пик в %4 Дб)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1036"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1039"/>
         <source>
 %1	%2 (%3 dB peak)</source>
         <translation>
 %1	%2 (пик в %3 Дб)</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1203"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1256"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1266"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1206"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1259"/>
+        <location filename="../svgui/layer/WaveformLayer.cpp" line="1269"/>
         <source>0dB</source>
         <translation>0 Дб</translation>
     </message>
     <message>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1204"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1258"/>
-        <location filename="../svgui/layer/WaveformLayer.cpp" line="1268"/>
         <source>-Inf</source>
-        <translation>-Inf</translation>
+        <translation type="vanished">-Inf</translation>
     </message>
 </context>
 <context>
     <name>WindowShapePreview</name>
     <message>
-        <location filename="../svgui/widgets/WindowShapePreview.cpp" line="118"/>
+        <location filename="../svgui/widgets/WindowShapePreview.cpp" line="120"/>
         <source>V / time</source>
         <translation>V / время</translation>
     </message>
@@ -9050,7 +9750,7 @@
 <context>
     <name>WritableWaveFileModel</name>
     <message>
-        <location filename="../svcore/data/model/WritableWaveFileModel.h" line="124"/>
+        <location filename="../svcore/data/model/WritableWaveFileModel.h" line="147"/>
         <source>Writable Wave File</source>
         <translation>Записываемый звуковой файл</translation>
     </message>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/icons/sonic-visualiser.svg	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,507 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32px"
+   height="32px"
+   id="svg1900"
+   sodipodi:version="0.32"
+   inkscape:version="0.44.1"
+   sodipodi:docbase="/work/sonic-visualiser"
+   sodipodi:docname="sv-icon.svg"
+   inkscape:export-filename="/work/sonic-visualiser/test-d1.png"
+   inkscape:export-xdpi="106.65"
+   inkscape:export-ydpi="106.65">
+  <defs
+     id="defs1902">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3958"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path3955"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path3952"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.4) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path3949"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Sstart"
+       style="overflow:visible">
+      <path
+         id="path3946"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.2) translate(6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Send"
+       style="overflow:visible;">
+      <path
+         id="path3943"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.2) rotate(180) translate(6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path3940"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path3937"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path3934"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path3931"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Sstart"
+       style="overflow:visible">
+      <path
+         id="path3928"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) translate(-2.3,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Send"
+       style="overflow:visible;">
+      <path
+         id="path3925"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) rotate(180) translate(-2.3,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Tail"
+       style="overflow:visible">
+      <g
+         id="g3910"
+         transform="scale(-1.2)">
+        <path
+           id="path3912"
+           d="M -3.8048674,-3.9585227 L 0.54352094,0"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path3914"
+           d="M -1.2866832,-3.9585227 L 3.0617053,0"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path3916"
+           d="M 1.3053582,-3.9585227 L 5.6537466,0"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path3918"
+           d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path3920"
+           d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path3922"
+           d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+      </g>
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DistanceIn"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="DistanceIn">
+      <g
+         id="g3904">
+        <path
+           style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
+           d="M 0,0 L 2,0"
+           id="path2306" />
+        <path
+           style="fill:#000000;fill-rule:evenodd;stroke:none"
+           d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z "
+           id="path2302" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
+           d="M 0,-4 L 0,40"
+           id="path2304" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutS"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutS"
+       style="overflow:visible">
+      <path
+         id="path3854"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.2)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutM"
+       style="overflow:visible">
+      <path
+         id="path3857"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleOutL"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleOutL"
+       style="overflow:visible">
+      <path
+         id="path3860"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInS"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInS"
+       style="overflow:visible">
+      <path
+         id="path3863"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.2)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path3866"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInL"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInL"
+       style="overflow:visible">
+      <path
+         id="path3869"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondS"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="DiamondS"
+       style="overflow:visible">
+      <path
+         id="path3872"
+         d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.2)" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="DiamondM"
+       style="overflow:visible">
+      <path
+         id="path3875"
+         d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DiamondL"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="DiamondL"
+       style="overflow:visible">
+      <path
+         id="path3878"
+         d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="SquareS"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="SquareS"
+       style="overflow:visible">
+      <path
+         id="path3881"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.2)" />
+    </marker>
+    <marker
+       inkscape:stockid="SquareM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="SquareM"
+       style="overflow:visible">
+      <path
+         id="path3884"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="SquareL"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="SquareL"
+       style="overflow:visible">
+      <path
+         id="path3887"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="Dot_s"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Dot_s"
+       style="overflow:visible">
+      <path
+         id="path3890"
+         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none"
+         transform="scale(0.2) translate(7.4, 1)" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DistanceOut"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="DistanceOut">
+      <g
+         id="g2300">
+        <path
+           style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square"
+           d="M 0,0 L -2,0"
+           id="path2316" />
+        <path
+           style="fill:#000000;fill-rule:evenodd;stroke:none"
+           d="M 0,0 L -13,4 L -9,0 -13,-4 L 0,0 z "
+           id="path2312" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square"
+           d="M 0,-4 L 0,40"
+           id="path2314" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Dot_l"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Dot_l"
+       style="overflow:visible">
+      <path
+         id="path3896"
+         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none"
+         transform="scale(0.8) translate(7.4, 1)" />
+    </marker>
+    <marker
+       inkscape:stockid="Dot_m"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Dot_m"
+       style="overflow:visible">
+      <path
+         id="path3893"
+         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none"
+         transform="scale(0.4) translate(7.4, 1)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.197802"
+     inkscape:cx="16.018908"
+     inkscape:cy="13.653906"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="816"
+     inkscape:window-height="606"
+     inkscape:window-x="145"
+     inkscape:window-y="175" />
+  <metadata
+     id="metadata1905">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d45500;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 3.905299,16.01472 C 27.5,16.01472 27.5,16.01472 27.5,16.01472"
+       id="path4036" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1.356;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:1.39999998;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 4.189383,16.015203 C 7.6265694,16.015203 8.0726528,16.025708 8.0726528,16.025708 C 9.66349,9.1090346 9.741433,8.3087074 10.172784,15.048932 C 10.831635,26.830929 11.416632,20.601324 12.258324,15.76545 C 13.844917,0.39957958 14.006502,6.1759314 14.342565,9.4067063 C 15.634829,25.384548 15.579075,28.965284 16.269833,23.658757 C 16.783168,19.715219 18.310939,3.0919969 18.584891,7.6743646 C 20.490285,25.887346 20.546625,24.84451 21.131971,20.132265 C 23.062537,1.6773601 22.472829,16.437356 23.676672,16.115011 C 27.08449,16.115011 27.026616,16.025708 27.026616,16.025708 L 27.47205,16.025708"
+       id="path3783"
+       sodipodi:nodetypes="cccccsccccc" />
+    <rect
+       style="fill:none;stroke:#d45500;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3775"
+       width="25.004908"
+       height="24.915606"
+       x="3.4828262"
+       y="3.5122664" />
+  </g>
+</svg>
--- a/main/MainWindow.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/MainWindow.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -32,6 +32,7 @@
 #include "view/ViewManager.h"
 #include "base/Preferences.h"
 #include "base/ResourceFinder.h"
+#include "base/RecordDirectory.h"
 #include "layer/WaveformLayer.h"
 #include "layer/TimeRulerLayer.h"
 #include "layer/TimeInstantLayer.h"
@@ -42,11 +43,12 @@
 #include "layer/SliceableLayer.h"
 #include "layer/ImageLayer.h"
 #include "layer/RegionLayer.h"
-#include "widgets/Fader.h"
 #include "view/Overview.h"
 #include "widgets/PropertyBox.h"
 #include "widgets/PropertyStack.h"
 #include "widgets/AudioDial.h"
+#include "widgets/LevelPanWidget.h"
+#include "widgets/LevelPanToolButton.h"
 #include "widgets/IconLoader.h"
 #include "widgets/LayerTreeDialog.h"
 #include "widgets/ListInputDialog.h"
@@ -57,8 +59,10 @@
 #include "widgets/LabelCounterInputDialog.h"
 #include "widgets/ActivityLog.h"
 #include "widgets/UnitConverter.h"
+#include "widgets/ProgressDialog.h"
+#include "widgets/CSVAudioFormatDialog.h"
 #include "audio/AudioCallbackPlaySource.h"
-#include "audio/AudioRecordTarget.h"
+#include "audio/AudioCallbackRecordTarget.h"
 #include "audio/PlaySpeedRangeMapper.h"
 #include "data/fileio/DataFileReaderFactory.h"
 #include "data/fileio/PlaylistFileReader.h"
@@ -119,9 +123,10 @@
 #include <QCheckBox>
 #include <QRegExp>
 #include <QScrollArea>
-#include <QDesktopServices>
+#include <QCloseEvent>
 #include <QDialogButtonBox>
 #include <QFileSystemWatcher>
+#include <QTextEdit>
 
 #include <iostream>
 #include <cstdio>
@@ -173,6 +178,8 @@
 {
     Profiler profiler("MainWindow::MainWindow");
 
+    SVDEBUG << "MainWindow: " << getReleaseText() << endl;
+
     setWindowTitle(QApplication::applicationName());
 
     UnitDatabase *udb = UnitDatabase::getInstance();
@@ -194,6 +201,8 @@
     cdb->setUseDarkBackground(cdb->addColour(QColor(225, 74, 255), tr("Bright Purple")), true);
     cdb->setUseDarkBackground(cdb->addColour(QColor(255, 188, 80), tr("Bright Orange")), true);
 
+    SVDEBUG << "MainWindow: Creating main user interface layout" << endl;
+
     QFrame *frame = new QFrame;
     setCentralWidget(frame);
 
@@ -210,7 +219,9 @@
 
     m_overview = new Overview(frame);
     m_overview->setViewManager(m_viewManager);
-    m_overview->setFixedHeight(40);
+    int overviewHeight = m_viewManager->scalePixelSize(35);
+    if (overviewHeight < 40) overviewHeight = 40;
+    m_overview->setFixedHeight(overviewHeight);
 #ifndef _WIN32
     // For some reason, the contents of the overview never appear if we
     // make this setting on Windows.  I have no inclination at the moment
@@ -225,24 +236,14 @@
     m_panLayer->setAggressiveCacheing(true);
     m_overview->addLayer(m_panLayer);
 
-    if (m_viewManager->getGlobalDarkBackground()) {
-        m_panLayer->setBaseColour
-            (ColourDatabase::getInstance()->getColourIndex(tr("Bright Green")));
-    } else {
-        m_panLayer->setBaseColour
-            (ColourDatabase::getInstance()->getColourIndex(tr("Green")));
-    }
-
-    m_fader = new Fader(frame, false);
-    connect(m_fader, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
-    connect(m_fader, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
+    coloursChanged(); // sets pan layer colour from preferences
 
     m_playSpeed = new AudioDial(frame);
     m_playSpeed->setMinimum(0);
     m_playSpeed->setMaximum(120);
     m_playSpeed->setValue(60);
-    m_playSpeed->setFixedWidth(32);
-    m_playSpeed->setFixedHeight(32);
+    m_playSpeed->setFixedWidth(overviewHeight);
+    m_playSpeed->setFixedHeight(overviewHeight);
     m_playSpeed->setNotchesVisible(true);
     m_playSpeed->setPageStep(10);
     m_playSpeed->setObjectName(tr("Playback Speed"));
@@ -250,38 +251,49 @@
     m_playSpeed->setDefaultValue(60);
     m_playSpeed->setShowToolTip(true);
     connect(m_playSpeed, SIGNAL(valueChanged(int)),
-	    this, SLOT(playSpeedChanged(int)));
+            this, SLOT(playSpeedChanged(int)));
     connect(m_playSpeed, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
     connect(m_playSpeed, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
 
-    IconLoader il;
+    m_mainLevelPan = new LevelPanToolButton(frame);
+    connect(m_mainLevelPan, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget()));
+    connect(m_mainLevelPan, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget()));
+    m_mainLevelPan->setFixedHeight(overviewHeight);
+    m_mainLevelPan->setFixedWidth(overviewHeight);
+    m_mainLevelPan->setImageSize((overviewHeight * 3) / 4);
+    m_mainLevelPan->setBigImageSize(overviewHeight * 3);
 
     m_playControlsSpacer = new QFrame;
 
-    layout->setSpacing(4);
-    layout->addWidget(m_mainScroll, 0, 0, 1, 5);
-    layout->addWidget(m_overview, 1, 1);
+    layout->setSpacing(m_viewManager->scalePixelSize(4));
+    layout->addWidget(m_mainScroll, 0, 0, 1, 4);
+    layout->addWidget(m_overview, 1, 0);
+    layout->addWidget(m_playSpeed, 1, 1);
     layout->addWidget(m_playControlsSpacer, 1, 2);
-    layout->addWidget(m_playSpeed, 1, 3);
-    layout->addWidget(m_fader, 1, 4);
+    layout->addWidget(m_mainLevelPan, 1, 3);
 
     m_playControlsWidth = 
-        m_fader->width() + m_playSpeed->width() + layout->spacing() * 2;
-
-    layout->setColumnMinimumWidth(0, 14);
-    layout->setColumnStretch(0, 0);
+        m_mainLevelPan->width() + m_playSpeed->width() + layout->spacing() * 2;
 
     m_paneStack->setPropertyStackMinWidth(m_playControlsWidth
                                           + 2 + layout->spacing());
     m_playControlsSpacer->setFixedSize(QSize(2, 2));
 
-    layout->setColumnStretch(1, 10);
+    layout->setColumnStretch(0, 10);
 
     connect(m_paneStack, SIGNAL(propertyStacksResized(int)),
             this, SLOT(propertyStacksResized(int)));
 
     frame->setLayout(layout);
 
+    SVDEBUG << "MainWindow: Creating menus and toolbars" << endl;
+
+#ifdef Q_OS_MAC
+    // Mac doesn't align menu labels when icons are shown: result is messy
+    QApplication::setAttribute(Qt::AA_DontShowIconsInMenus);
+    setIconsVisibleInMenus(false);
+#endif
+
     setupMenus();
     setupToolbars();
     setupHelpMenu();
@@ -307,21 +319,32 @@
     m_unitConverter->hide();
 
     setAudioRecordMode(RecordCreateAdditionalModel);
-    
+
+    SVDEBUG << "MainWindow: Creating new session" << endl;
+
     newSession();
 
     connect(m_midiInput, SIGNAL(eventsAvailable()),
             this, SLOT(midiEventsAvailable()));
 
-    NetworkPermissionTester tester;
+    SVDEBUG << "MainWindow: Creating network permission tester" << endl;
+
+    NetworkPermissionTester tester(withOSCSupport);
     bool networkPermission = tester.havePermission();
     if (networkPermission) {
         if (withOSCSupport) {
+            SVDEBUG << "MainWindow: Creating OSC queue" << endl;
             startOSCQueue();
         }
+
+        SVDEBUG << "MainWindow: Starting transform population thread" << endl;
         TransformFactory::getInstance()->startPopulationThread();
+
+        SVDEBUG << "MainWindow: Creating surveyer" << endl;
         m_surveyer = new Surveyer
             ("sonicvisualiser.org", "survey23-present.txt", "survey23.php");
+
+        SVDEBUG << "MainWindow: Creating version tester" << endl;
         m_versionTester = new VersionTester
             ("sonicvisualiser.org", "latest-version.txt", SV_VERSION);
         connect(m_versionTester, SIGNAL(newerVersionAvailable(QString)),
@@ -331,10 +354,16 @@
         m_versionTester = 0;
     }
 
+/*
+    QTimer::singleShot(500, this, SLOT(betaReleaseWarning()));
+*/
+    
     QString warning = PluginScan::getInstance()->getStartupFailureReport();
     if (warning != "") {
         QTimer::singleShot(500, this, SLOT(pluginPopulationWarning()));
     }
+
+    SVDEBUG << "MainWindow: Constructor done" << endl;
 }
 
 MainWindow::~MainWindow()
@@ -363,18 +392,17 @@
         // workaround, to remove the appmenu-qt5 package, but that is
         // awkward and the problem is so severe that it merits disabling
         // the system menubar integration altogether. Like this:
-	menuBar()->setNativeMenuBar(false);  // fix #1039
+        menuBar()->setNativeMenuBar(false);  // fix #1039
 #endif
-
+        
         m_rightButtonMenu = new QMenu();
 
-        // No -- we don't want tear-off enabled on the right-button
-        // menu.  If it is enabled, then simply right-clicking and
-        // releasing will pop up the menu, activate the tear-off, and
-        // leave the torn-off menu window in front of the main window.
-        // That isn't desirable.  I'm not sure it ever would be, in a
-        // context menu -- perhaps technically a Qt bug?
-//        m_rightButtonMenu->setTearOffEnabled(true);
+        // We don't want tear-off enabled on the right-button menu.
+        // If it is enabled, then simply right-clicking and releasing
+        // will pop up the menu, activate the tear-off, and leave the
+        // torn-off menu window in front of the main window.  That
+        // isn't desirable.
+        m_rightButtonMenu->setTearOffEnabled(false);
     }
 
     if (m_rightButtonTransformsMenu) {
@@ -527,7 +555,7 @@
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
     toolbar->addAction(action);
-	
+        
     icon = il.load("filesaveas");
     action = new QAction(icon, tr("Save Session &As..."), this);
     action->setShortcut(tr("Ctrl+Shift+S"));
@@ -538,16 +566,6 @@
 
     menu->addSeparator();
 
-/*
-    icon = il.load("fileopenaudio");
-    action = new QAction(icon, tr("&Import Audio File..."), this);
-    action->setShortcut(tr("Ctrl+I"));
-    action->setStatusTip(tr("Import an existing audio file"));
-    connect(action, SIGNAL(triggered()), this, SLOT(importAudio()));
-    m_keyReference->registerShortcut(action);
-    menu->addAction(action);
-*/
-
     // the Replace action we made earlier
     menu->addAction(raction);
 
@@ -560,12 +578,6 @@
     connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool)));
     menu->addAction(action);
 
-    action = new QAction(tr("Export Audio Data..."), this);
-    action->setStatusTip(tr("Export audio from selection into a data file"));
-    connect(action, SIGNAL(triggered()), this, SLOT(exportAudioData()));
-    connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool)));
-    menu->addAction(action);
-
     menu->addSeparator();
 
     action = new QAction(tr("Import Annotation &Layer..."), this);
@@ -585,6 +597,19 @@
     menu->addAction(action);
 
     menu->addSeparator();
+    
+    action = new QAction(tr("Convert Audio from Data File..."), this);
+    action->setStatusTip(tr("Convert and import audio sample values from a CSV data file"));
+    connect(action, SIGNAL(triggered()), this, SLOT(convertAudio()));
+    menu->addAction(action);
+    
+    action = new QAction(tr("Export Audio to Data File..."), this);
+    action->setStatusTip(tr("Export audio from selection into a CSV data file"));
+    connect(action, SIGNAL(triggered()), this, SLOT(exportAudioData()));
+    connect(this, SIGNAL(canExportAudio(bool)), action, SLOT(setEnabled(bool)));
+    menu->addAction(action);
+
+    menu->addSeparator();
 
     action = new QAction(tr("Export Image File..."), this);
     action->setStatusTip(tr("Export a single pane to an image file"));
@@ -592,9 +617,15 @@
     connect(this, SIGNAL(canExportImage(bool)), action, SLOT(setEnabled(bool)));
     menu->addAction(action);
 
+    action = new QAction(tr("Export SVG File..."), this);
+    action->setStatusTip(tr("Export a single pane to a scalable SVG image file"));
+    connect(action, SIGNAL(triggered()), this, SLOT(exportSVG()));
+    connect(this, SIGNAL(canExportImage(bool)), action, SLOT(setEnabled(bool)));
+    menu->addAction(action);
+
     menu->addSeparator();
 
-    action = new QAction(tr("Browse Recorded Audio Folder"), this);
+    action = new QAction(tr("Browse Recorded and Converted Audio"), this);
     action->setStatusTip(tr("Open the Recorded Audio folder in the system file browser"));
     connect(action, SIGNAL(triggered()), this, SLOT(browseRecordedAudio()));
     menu->addAction(action);
@@ -627,7 +658,7 @@
     action->setStatusTip(tr("Adjust the application preferences"));
     connect(action, SIGNAL(triggered()), this, SLOT(preferences()));
     menu->addAction(action);
-	
+        
     menu->addSeparator();
     action = new QAction(il.load("exit"),
                          tr("&Quit"), this);
@@ -714,7 +745,7 @@
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
     m_rightButtonMenu->addAction(action);
-	
+        
     action = new QAction(tr("Select &Visible Range"), this);
     action->setShortcut(tr("Ctrl+Shift+A"));
     action->setStatusTip(tr("Select the time range corresponding to the current window width"));
@@ -722,7 +753,7 @@
     connect(this, SIGNAL(canSelect(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
-	
+        
     action = new QAction(tr("Select to &Start"), this);
     action->setShortcut(tr("Shift+Left"));
     action->setStatusTip(tr("Select from the start of the session to the current playback position"));
@@ -730,7 +761,7 @@
     connect(this, SIGNAL(canSelect(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
-	
+        
     action = new QAction(tr("Select to &End"), this);
     action->setShortcut(tr("Shift+Right"));
     action->setStatusTip(tr("Select from the current playback position to the end of the session"));
@@ -753,35 +784,62 @@
     m_keyReference->setCategory(tr("Tapping Time Instants"));
 
     action = new QAction(tr("&Insert Instant at Playback Position"), this);
-    action->setShortcut(tr("Enter"));
+    action->setShortcut(tr(";"));
     action->setStatusTip(tr("Insert a new time instant at the current playback position, in a new layer if necessary"));
     connect(action, SIGNAL(triggered()), this, SLOT(insertInstant()));
     connect(this, SIGNAL(canInsertInstant(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
 
-    // Laptop shortcut (no keypad Enter key)
-    QString shortcut(tr(";"));
+    // Historically this was the main shortcut for "Insert Instant at
+    // Playback Position". Note that Enter refers to the keypad key,
+    // rather than the Return key, so this doesn't actually exist on
+    // many keyboards now. Accordingly the alternative shortcut ";"
+    // has been promoted to primary, listed above. Same goes for the
+    // shifted version below
+    QString shortcut(tr("Enter"));
     connect(new QShortcut(shortcut, this), SIGNAL(activated()),
             this, SLOT(insertInstant()));
     m_keyReference->registerAlternativeShortcut(action, shortcut);
 
     action = new QAction(tr("Insert Instants at Selection &Boundaries"), this);
-    action->setShortcut(tr("Shift+Enter"));
+    action->setShortcut(tr("Shift+;"));
     action->setStatusTip(tr("Insert new time instants at the start and end of the current selected regions, in a new layer if necessary"));
     connect(action, SIGNAL(triggered()), this, SLOT(insertInstantsAtBoundaries()));
     connect(this, SIGNAL(canInsertInstantsAtBoundaries(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
 
+    shortcut = QString(tr("Shift+Enter"));
+    connect(new QShortcut(shortcut, this), SIGNAL(activated()),
+            this, SLOT(insertInstantsAtBoundaries()));
+    m_keyReference->registerAlternativeShortcut(action, shortcut);
+
+    // The previous two actions used shortcuts with the (keypad) Enter
+    // key, while this one I (bizarrely) switched from Enter to Return
+    // in September 2014. Let's make it consistent with the above by
+    // making the primary shortcut for it Ctrl+Shift+; and keeping
+    // both Return and Enter as synonyms for ;
     action = new QAction(tr("Insert Item at Selection"), this);
-    action->setShortcut(tr("Ctrl+Shift+Return"));
+    action->setShortcut(tr("Ctrl+Shift+;"));
     action->setStatusTip(tr("Insert a new note or region item corresponding to the current selection"));
     connect(action, SIGNAL(triggered()), this, SLOT(insertItemAtSelection()));
     connect(this, SIGNAL(canInsertItemAtSelection(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
 
+    shortcut = QString(tr("Ctrl+Shift+Enter"));
+    connect(new QShortcut(shortcut, this), SIGNAL(activated()),
+            this, SLOT(insertItemAtSelection()));
+    m_keyReference->registerAlternativeShortcut(action, shortcut);
+
+    shortcut = QString(tr("Ctrl+Shift+Return"));
+    connect(new QShortcut(shortcut, this), SIGNAL(activated()),
+            this, SLOT(insertItemAtSelection()));
+    // we had that one for historical compatibility, but let's not
+    // register it publicly; having three shortcuts for such an
+    // obscure function is really over-egging it
+
     menu->addSeparator();
 
     QMenu *numberingMenu = menu->addMenu(tr("Number New Instants with"));
@@ -878,7 +936,7 @@
     connect(this, SIGNAL(canScroll(bool)), m_scrollLeftAction, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(m_scrollLeftAction);
     menu->addAction(m_scrollLeftAction);
-	
+        
     m_scrollRightAction = new QAction(tr("Scroll &Right"), this);
     m_scrollRightAction->setShortcut(tr("Right"));
     m_scrollRightAction->setStatusTip(tr("Scroll the current pane to the right"));
@@ -886,7 +944,7 @@
     connect(this, SIGNAL(canScroll(bool)), m_scrollRightAction, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(m_scrollRightAction);
     menu->addAction(m_scrollRightAction);
-	
+        
     action = new QAction(tr("&Jump Left"), this);
     action->setShortcut(tr("Ctrl+Left"));
     action->setStatusTip(tr("Scroll the current pane a big step to the left"));
@@ -894,7 +952,7 @@
     connect(this, SIGNAL(canScroll(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
-	
+        
     action = new QAction(tr("J&ump Right"), this);
     action->setShortcut(tr("Ctrl+Right"));
     action->setStatusTip(tr("Scroll the current pane a big step to the right"));
@@ -910,7 +968,7 @@
     connect(this, SIGNAL(canScroll(bool)), action, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(action);
     menu->addAction(action);
-	
+        
     action = new QAction(tr("Peek Right"), this);
     action->setShortcut(tr("Alt+Right"));
     action->setStatusTip(tr("Scroll the current pane to the right without moving the playback cursor or other panes"));
@@ -931,7 +989,7 @@
     connect(this, SIGNAL(canZoom(bool)), m_zoomInAction, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(m_zoomInAction);
     menu->addAction(m_zoomInAction);
-	
+        
     m_zoomOutAction = new QAction(il.load("zoom-out"),
                                   tr("Zoom &Out"), this);
     m_zoomOutAction->setShortcut(tr("Down"));
@@ -940,7 +998,7 @@
     connect(this, SIGNAL(canZoom(bool)), m_zoomOutAction, SLOT(setEnabled(bool)));
     m_keyReference->registerShortcut(m_zoomOutAction);
     menu->addAction(m_zoomOutAction);
-	
+        
     action = new QAction(tr("Restore &Default Zoom"), this);
     action->setStatusTip(tr("Restore the zoom level to the default"));
     connect(action, SIGNAL(triggered()), this, SLOT(zoomDefault()));
@@ -1081,22 +1139,79 @@
 #endif
 }
 
+QString
+MainWindow::shortcutFor(LayerFactory::LayerType layer, bool isPaneMenu)
+{
+    QString shortcutText;
+    
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wswitch-enum"
+#endif
+    
+    switch (layer) {
+    case LayerFactory::Waveform:
+        if (isPaneMenu) {
+            shortcutText = tr("W");
+        } else {
+            shortcutText = tr("Shift+W");
+        }
+        break;
+                
+    case LayerFactory::Spectrogram:
+        if (isPaneMenu) {
+            shortcutText = tr("G");
+        } else {
+            shortcutText = tr("Shift+G");
+        }
+        break;
+                
+    case LayerFactory::MelodicRangeSpectrogram:
+        if (isPaneMenu) {
+            shortcutText = tr("M");
+        } else {
+            shortcutText = tr("Shift+M");
+        }
+        break;
+                
+    case LayerFactory::PeakFrequencySpectrogram:
+        if (isPaneMenu) {
+            shortcutText = tr("K");
+        } else {
+            shortcutText = tr("Shift+K");
+        }
+        break;
+                
+    case LayerFactory::Spectrum:
+        if (isPaneMenu) {
+            shortcutText = tr("U");
+        } else {
+            shortcutText = tr("Shift+U");
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    return shortcutText;
+}
+
 void
 MainWindow::setupPaneAndLayerMenus()
 {
     if (m_paneMenu) {
-	m_paneActions.clear();
-	m_paneMenu->clear();
+        m_paneActions.clear();
+        m_paneMenu->clear();
     } else {
-	m_paneMenu = menuBar()->addMenu(tr("&Pane"));
+        m_paneMenu = menuBar()->addMenu(tr("&Pane"));
         m_paneMenu->setTearOffEnabled(true);
     }
 
     if (m_layerMenu) {
-	m_layerActions.clear();
-	m_layerMenu->clear();
+        m_layerActions.clear();
+        m_layerMenu->clear();
     } else {
-	m_layerMenu = menuBar()->addMenu(tr("&Layer"));
+        m_layerMenu = menuBar()->addMenu(tr("&Layer"));
         m_layerMenu->setTearOffEnabled(true);
     }
 
@@ -1127,36 +1242,34 @@
 
     menu = m_layerMenu;
 
-//    menu->addSeparator();
-
     LayerFactory::LayerTypeSet emptyLayerTypes =
-	LayerFactory::getInstance()->getValidEmptyLayerTypes();
+        LayerFactory::getInstance()->getValidEmptyLayerTypes();
 
     for (LayerFactory::LayerTypeSet::iterator i = emptyLayerTypes.begin();
-	 i != emptyLayerTypes.end(); ++i) {
-	
-	QIcon icon;
-	QString mainText, tipText, channelText;
-	LayerFactory::LayerType type = *i;
-	QString name = LayerFactory::getInstance()->getLayerPresentationName(type);
-	
-	icon = il.load(LayerFactory::getInstance()->getLayerIconName(type));
-
-	mainText = tr("Add New %1 Layer").arg(name);
-	tipText = tr("Add a new empty layer of type %1").arg(name);
-
-	action = new QAction(icon, mainText, this);
-	action->setStatusTip(tipText);
-
-	if (type == LayerFactory::Text) {
-	    action->setShortcut(tr("T"));
+         i != emptyLayerTypes.end(); ++i) {
+        
+        QIcon icon;
+        QString mainText, tipText, channelText;
+        LayerFactory::LayerType type = *i;
+        QString name = LayerFactory::getInstance()->getLayerPresentationName(type);
+        
+        icon = il.load(LayerFactory::getInstance()->getLayerIconName(type));
+
+        mainText = tr("Add New %1 Layer").arg(name);
+        tipText = tr("Add a new empty layer of type %1").arg(name);
+
+        action = new QAction(icon, mainText, this);
+        action->setStatusTip(tipText);
+
+        if (type == LayerFactory::Text) {
+            action->setShortcut(tr("T"));
             m_keyReference->registerShortcut(action);
-	}
-
-	connect(action, SIGNAL(triggered()), this, SLOT(addLayer()));
-	connect(this, SIGNAL(canAddLayer(bool)), action, SLOT(setEnabled(bool)));
-	m_layerActions[action] = LayerConfiguration(type);
-	menu->addAction(action);
+        }
+
+        connect(action, SIGNAL(triggered()), this, SLOT(addLayer()));
+        connect(this, SIGNAL(canAddLayer(bool)), action, SLOT(setEnabled(bool)));
+        m_layerActions[action] = LayerConfiguration(type);
+        menu->addAction(action);
         m_rightButtonLayerMenu->addAction(action);
     }
     
@@ -1164,10 +1277,10 @@
     menu->addSeparator();
 
     LayerFactory::LayerType backgroundTypes[] = {
-	LayerFactory::Waveform,
-	LayerFactory::Spectrogram,
-	LayerFactory::MelodicRangeSpectrogram,
-	LayerFactory::PeakFrequencySpectrogram,
+        LayerFactory::Waveform,
+        LayerFactory::Spectrogram,
+        LayerFactory::MelodicRangeSpectrogram,
+        LayerFactory::PeakFrequencySpectrogram,
         LayerFactory::Spectrum
     };
 
@@ -1179,22 +1292,24 @@
     }
 
     for (unsigned int i = 0;
-	 i < sizeof(backgroundTypes)/sizeof(backgroundTypes[0]); ++i) {
+         i < sizeof(backgroundTypes)/sizeof(backgroundTypes[0]); ++i) {
 
         const int paneMenuType = 0, layerMenuType = 1;
 
-	for (int menuType = paneMenuType; menuType <= layerMenuType; ++menuType) {
-
-	    if (menuType == paneMenuType) menu = m_paneMenu;
-	    else menu = m_layerMenu;
-
-	    QMenu *submenu = 0;
+        for (int menuType = paneMenuType; menuType <= layerMenuType; ++menuType) {
+
+            if (menuType == paneMenuType) menu = m_paneMenu;
+            else menu = m_layerMenu;
+
+            QMenu *submenu = 0;
 
             QIcon icon;
-            QString mainText, shortcutText, tipText, channelText;
+            QString mainText, tipText, channelText;
             LayerFactory::LayerType type = backgroundTypes[i];
             bool mono = true;
 
+            QString shortcutText = shortcutFor(type, menuType == paneMenuType);
+
 // Avoid warnings/errors with -Wextra because we aren't explicitly
 // handling all layer types (-Wall is OK with this because of the
 // default but the stricter level insists)
@@ -1208,47 +1323,39 @@
                 icon = il.load("waveform");
                 mainText = tr("Add &Waveform");
                 if (menuType == paneMenuType) {
-                    shortcutText = tr("W");
                     tipText = tr("Add a new pane showing a waveform view");
                 } else {
-                    shortcutText = tr("Shift+W");
                     tipText = tr("Add a new layer showing a waveform view");
                 }
                 mono = false;
                 break;
-		
+                
             case LayerFactory::Spectrogram:
                 icon = il.load("spectrogram");
                 mainText = tr("Add Spectro&gram");
                 if (menuType == paneMenuType) {
-                    shortcutText = tr("G");
                     tipText = tr("Add a new pane showing a spectrogram");
                 } else {
-                    shortcutText = tr("Shift+G");
                     tipText = tr("Add a new layer showing a spectrogram");
                 }
                 break;
-		
+                
             case LayerFactory::MelodicRangeSpectrogram:
                 icon = il.load("spectrogram");
                 mainText = tr("Add &Melodic Range Spectrogram");
                 if (menuType == paneMenuType) {
-                    shortcutText = tr("M");
                     tipText = tr("Add a new pane showing a spectrogram set up for an overview of note pitches");
                 } else {
-                    shortcutText = tr("Shift+M");
                     tipText = tr("Add a new layer showing a spectrogram set up for an overview of note pitches");
                 }
                 break;
-		
+                
             case LayerFactory::PeakFrequencySpectrogram:
                 icon = il.load("spectrogram");
                 mainText = tr("Add Pea&k Frequency Spectrogram");
                 if (menuType == paneMenuType) {
-                    shortcutText = tr("K");
                     tipText = tr("Add a new pane showing a spectrogram set up for tracking frequencies");
                 } else {
-                    shortcutText = tr("Shift+K");
                     tipText = tr("Add a new layer showing a spectrogram set up for tracking frequencies");
                 }
                 break;
@@ -1257,10 +1364,8 @@
                 icon = il.load("spectrum");
                 mainText = tr("Add Spectr&um");
                 if (menuType == paneMenuType) {
-                    shortcutText = tr("U");
                     tipText = tr("Add a new pane showing a frequency spectrum");
                 } else {
-                    shortcutText = tr("Shift+U");
                     tipText = tr("Add a new layer showing a frequency spectrum");
                 }
                 break;
@@ -1389,9 +1494,9 @@
                         m_layerActions[action] = LayerConfiguration(type, 0, 0);
                         m_rightButtonLayerMenu->addAction(action);
                     }
-		}
-	    }
-	}
+                }
+            }
+        }
     }
 
     m_rightButtonLayerMenu->addSeparator();
@@ -1499,6 +1604,36 @@
 }
 
 void
+MainWindow::updateLayerShortcutsFor(Model *model)
+{
+    set<LayerFactory::LayerType> seen;
+    
+    for (auto &a : m_paneActions) {
+        if (!a.second.sourceModel) continue; // empty pane/layer shortcut
+        auto type = a.second.layer;
+        if (a.second.sourceModel == model && seen.find(type) == seen.end()) {
+            a.first->setShortcut(shortcutFor(type, true));
+            seen.insert(type);
+        } else {
+            a.first->setShortcut(QString());
+        }
+    }
+
+    seen.clear();
+    
+    for (auto &a : m_layerActions) {
+        if (!a.second.sourceModel) continue; // empty pane/layer shortcut
+        auto type = a.second.layer;
+        if (a.second.sourceModel == model && seen.find(type) == seen.end()) {
+            a.first->setShortcut(shortcutFor(type, false));
+            seen.insert(type);
+        } else {
+            a.first->setShortcut(QString());
+        }
+    }
+}
+
+void
 MainWindow::setupTransformsMenu()
 {
     if (m_transformsMenu) {
@@ -1506,7 +1641,7 @@
         m_transformActionsReverse.clear();
         m_transformsMenu->clear();
     } else {
-	m_transformsMenu = menuBar()->addMenu(tr("&Transform")); 
+        m_transformsMenu = menuBar()->addMenu(tr("&Transform")); 
         m_transformsMenu->setTearOffEnabled(true);
         m_transformsMenu->setSeparatorsCollapsible(true);
     }
@@ -1639,9 +1774,9 @@
     }
 
     for (unsigned int i = 0; i < transforms.size(); ++i) {
-	
-	QString name = transforms[i].name;
-	if (name == "") name = transforms[i].identifier;
+        
+        QString name = transforms[i].name;
+        if (name == "") name = transforms[i].identifier;
 
 //        cerr << "Plugin Name: " << name << endl;
 
@@ -1668,11 +1803,11 @@
                 .arg(output);
         }
 
-	QAction *action = new QAction(tr("%1...").arg(name), this);
-	connect(action, SIGNAL(triggered()), this, SLOT(addLayer()));
-	m_transformActions[action] = transforms[i].identifier;
+        QAction *action = new QAction(tr("%1...").arg(name), this);
+        connect(action, SIGNAL(triggered()), this, SLOT(addLayer()));
+        m_transformActions[action] = transforms[i].identifier;
         m_transformActionsReverse[transforms[i].identifier] = action;
-	connect(this, SIGNAL(canAddLayer(bool)), action, SLOT(setEnabled(bool)));
+        connect(this, SIGNAL(canAddLayer(bool)), action, SLOT(setEnabled(bool)));
 
         action->setStatusTip(transforms[i].longDescription);
 
@@ -1777,6 +1912,11 @@
     connect(action, SIGNAL(triggered()), this, SLOT(website()));
     menu->addAction(action);
     
+    action = new QAction(tr("What's &New?"), this); 
+    action->setStatusTip(tr("Show changes in this release of %1").arg(name)); 
+    connect(action, SIGNAL(triggered()), this, SLOT(whatsNew()));
+    menu->addAction(action);
+    
     action = new QAction(tr("&About %1").arg(name), this); 
     action->setStatusTip(tr("Show information about %1").arg(name)); 
     connect(action, SIGNAL(triggered()), this, SLOT(about()));
@@ -1801,7 +1941,7 @@
                  action->shortcut().toString(),
                  tr("Re-open the current or most recently opened file"));
         }
-	m_recentFilesMenu->addAction(action);
+        m_recentFilesMenu->addAction(action);
     }
 }
 
@@ -1879,7 +2019,7 @@
         } else {
             ti->second->setShortcut(QString(""));
         }
-	m_recentTransformsMenu->addAction(ti->second);
+        m_recentTransformsMenu->addAction(ti->second);
     }
 }
 
@@ -1906,49 +2046,49 @@
 
     for (int i = 0; i < m_paneStack->getPaneCount(); ++i) {
 
-	Pane *pane = m_paneStack->getPane(i);
-	if (!pane) continue;
-
-	for (int j = 0; j < pane->getLayerCount(); ++j) {
-
-	    Layer *layer = pane->getLayer(j);
-	    if (!layer) continue;
-	    if (observedLayers.find(layer) != observedLayers.end()) {
-//		cerr << "found duplicate layer " << layer << endl;
-		continue;
-	    }
-
-//	    cerr << "found new layer " << layer << " (name = " 
-//		      << layer->getLayerPresentationName() << ")" << endl;
-
-	    orderedLayers.push_back(layer);
-	    observedLayers.insert(layer);
+        Pane *pane = m_paneStack->getPane(i);
+        if (!pane) continue;
+
+        for (int j = 0; j < pane->getLayerCount(); ++j) {
+
+            Layer *layer = pane->getLayer(j);
+            if (!layer) continue;
+            if (observedLayers.find(layer) != observedLayers.end()) {
+//                cerr << "found duplicate layer " << layer << endl;
+                continue;
+            }
+
+//            cerr << "found new layer " << layer << " (name = " 
+//                      << layer->getLayerPresentationName() << ")" << endl;
+
+            orderedLayers.push_back(layer);
+            observedLayers.insert(layer);
 
             if (factory->isLayerSliceable(layer)) {
                 sliceableLayers.insert(layer);
             }
-	}
+        }
     }
 
     map<QString, int> observedNames;
 
     for (size_t i = 0; i < orderedLayers.size(); ++i) {
-	
+        
         Layer *layer = orderedLayers[i];
 
-	QString name = layer->getLayerPresentationName();
-	int n = ++observedNames[name];
-	if (n > 1) name = QString("%1 <%2>").arg(name).arg(n);
-
-	QIcon icon = il.load(factory->getLayerIconName
+        QString name = layer->getLayerPresentationName();
+        int n = ++observedNames[name];
+        if (n > 1) name = QString("%1 <%2>").arg(name).arg(n);
+
+        QIcon icon = il.load(factory->getLayerIconName
                              (factory->getLayerType(layer)));
 
-	QAction *action = new QAction(icon, name, this);
-	connect(action, SIGNAL(triggered()), this, SLOT(addLayer()));
-	connect(this, SIGNAL(canAddLayer(bool)), action, SLOT(setEnabled(bool)));
-	m_existingLayerActions[action] = layer;
-
-	m_existingLayersMenu->addAction(action);
+        QAction *action = new QAction(icon, name, this);
+        connect(action, SIGNAL(triggered()), this, SLOT(addLayer()));
+        connect(this, SIGNAL(canAddLayer(bool)), action, SLOT(setEnabled(bool)));
+        m_existingLayerActions[action] = layer;
+
+        m_existingLayersMenu->addAction(action);
 
         if (sliceableLayers.find(layer) != sliceableLayers.end()) {
             action = new QAction(icon, name, this);
@@ -1998,11 +2138,18 @@
     m_playAction = toolbar->addAction(il.load("playpause"),
                                       tr("Play / Pause"));
     m_playAction->setCheckable(true);
+
+    /*: This text is a shortcut label referring to the space-bar on
+        the keyboard. It probably should not be translated, and
+        certainly should not be translated as if referring to an empty
+        void or to the extra-terrestrial universe.
+     */
     m_playAction->setShortcut(tr("Space"));
+
     m_playAction->setStatusTip(tr("Start or stop playback from the current position"));
     connect(m_playAction, SIGNAL(triggered()), this, SLOT(play()));
     connect(m_playSource, SIGNAL(playStatusChanged(bool)),
-	    m_playAction, SLOT(setChecked(bool)));
+            m_playAction, SLOT(setChecked(bool)));
     connect(m_playSource, SIGNAL(playStatusChanged(bool)),
             this, SLOT(playStatusChanged(bool)));
     connect(this, SIGNAL(canPlay(bool)), m_playAction, SLOT(setEnabled(bool)));
@@ -2034,7 +2181,7 @@
     m_recordAction->setStatusTip(tr("Record a new audio file"));
     connect(m_recordAction, SIGNAL(triggered()), this, SLOT(record()));
     connect(m_recordTarget, SIGNAL(recordStatusChanged(bool)),
-	    m_recordAction, SLOT(setChecked(bool)));
+            m_recordAction, SLOT(setChecked(bool)));
     connect(this, SIGNAL(canRecord(bool)),
             m_recordAction, SLOT(setEnabled(bool)));
 
@@ -2120,7 +2267,6 @@
     menu->addSeparator();
 
     m_rightButtonPlaybackMenu->addAction(m_playAction);
-    m_rightButtonPlaybackMenu->addAction(m_recordAction);
     m_rightButtonPlaybackMenu->addAction(m_playSelectionAction);
     m_rightButtonPlaybackMenu->addAction(m_playLoopAction);
     m_rightButtonPlaybackMenu->addAction(m_soloAction);
@@ -2197,7 +2343,7 @@
 
     m_keyReference->setCategory(tr("Tool Selection"));
     action = toolbar->addAction(il.load("select"),
-				tr("Select"));
+                                tr("Select"));
     action->setCheckable(true);
     action->setShortcut(tr("2"));
     action->setStatusTip(tr("Select ranges"));
@@ -2226,7 +2372,7 @@
 
     m_keyReference->setCategory(tr("Tool Selection"));
     action = toolbar->addAction(il.load("move"),
-				tr("Edit"));
+                                tr("Edit"));
     action->setCheckable(true);
     action->setShortcut(tr("3"));
     action->setStatusTip(tr("Edit items in layer"));
@@ -2247,7 +2393,7 @@
 
     m_keyReference->setCategory(tr("Tool Selection"));
     action = toolbar->addAction(il.load("draw"),
-				tr("Draw"));
+                                tr("Draw"));
     action->setCheckable(true);
     action->setShortcut(tr("4"));
     action->setStatusTip(tr("Draw new items in layer"));
@@ -2265,7 +2411,7 @@
 
     m_keyReference->setCategory(tr("Tool Selection"));
     action = toolbar->addAction(il.load("erase"),
-				tr("Erase"));
+                                tr("Erase"));
     action->setCheckable(true);
     action->setShortcut(tr("5"));
     action->setStatusTip(tr("Erase items from layer"));
@@ -2340,19 +2486,19 @@
         (haveCurrentPane &&
          (currentLayer != 0));
     bool havePlayTarget =
-	(m_playTarget != 0 || m_audioIO != 0);
+        (m_playTarget != 0 || m_audioIO != 0);
     bool haveSelection = 
-	(m_viewManager &&
-	 !m_viewManager->getSelections().empty());
+        (m_viewManager &&
+         !m_viewManager->getSelections().empty());
     bool haveCurrentEditableLayer =
-	(haveCurrentLayer &&
-	 currentLayer->isLayerEditable());
+        (haveCurrentLayer &&
+         currentLayer->isLayerEditable());
     bool haveCurrentTimeInstantsLayer = 
-	(haveCurrentLayer &&
-	 dynamic_cast<TimeInstantLayer *>(currentLayer));
+        (haveCurrentLayer &&
+         dynamic_cast<TimeInstantLayer *>(currentLayer));
     bool haveCurrentTimeValueLayer = 
-	(haveCurrentLayer &&
-	 dynamic_cast<TimeValueLayer *>(currentLayer));
+        (haveCurrentLayer &&
+         dynamic_cast<TimeValueLayer *>(currentLayer));
     
     bool alignMode = m_viewManager && m_viewManager->getAlignMode();
     emit canChangeSolo(havePlayTarget && !alignMode);
@@ -2398,8 +2544,8 @@
 MainWindow::updateDescriptionLabel()
 {
     if (!getMainModel()) {
-	m_descriptionLabel->setText(tr("No audio file loaded."));
-	return;
+        m_descriptionLabel->setText(tr("No audio file loaded."));
+        return;
     }
 
     QString description;
@@ -2411,15 +2557,15 @@
     if (m_playSource) tsr = m_playSource->getDeviceSampleRate();
 
     if (ssr != tsr) {
-	description = tr("%1Hz (resampling to %2Hz)").arg(ssr).arg(tsr);
+        description = tr("%1Hz (resampling to %2Hz)").arg(ssr).arg(tsr);
     } else {
-	description = QString("%1Hz").arg(ssr);
+        description = QString("%1Hz").arg(ssr);
     }
 
     description = QString("%1 - %2")
-	.arg(RealTime::frame2RealTime(getMainModel()->getEndFrame(), ssr)
-	     .toText(false).c_str())
-	.arg(description);
+        .arg(RealTime::frame2RealTime(getMainModel()->getEndFrame(), ssr)
+             .toText(false).c_str())
+        .arg(description);
 
     m_descriptionLabel->setText(description);
 }
@@ -2480,11 +2626,11 @@
     QString path = getOpenFileName(FileFinder::AudioFile);
 
     if (path != "") {
-	if (openAudio(path, ReplaceSession) == FileOpenFailed) {
+        if (openAudio(path, ReplaceSession) == FileOpenFailed) {
             emit hideSplash();
-	    QMessageBox::critical(this, tr("Failed to open file"),
-				  tr("<b>File open failed</b><p>Audio file \"%1\" could not be opened").arg(path));
-	}
+            QMessageBox::critical(this, tr("Failed to open file"),
+                                  tr("<b>File open failed</b><p>Audio file \"%1\" could not be opened").arg(path));
+        }
     }
 }
 
@@ -2494,11 +2640,11 @@
     QString path = getOpenFileName(FileFinder::AudioFile);
 
     if (path != "") {
-	if (openAudio(path, CreateAdditionalModel) == FileOpenFailed) {
+        if (openAudio(path, CreateAdditionalModel) == FileOpenFailed) {
             emit hideSplash();
-	    QMessageBox::critical(this, tr("Failed to open file"),
-				  tr("<b>File open failed</b><p>Audio file \"%1\" could not be opened").arg(path));
-	}
+            QMessageBox::critical(this, tr("Failed to open file"),
+                                  tr("<b>File open failed</b><p>Audio file \"%1\" could not be opened").arg(path));
+        }
     }
 }
 
@@ -2508,11 +2654,11 @@
     QString path = getOpenFileName(FileFinder::AudioFile);
 
     if (path != "") {
-	if (openAudio(path, ReplaceMainModel) == FileOpenFailed) {
+        if (openAudio(path, ReplaceMainModel) == FileOpenFailed) {
             emit hideSplash();
-	    QMessageBox::critical(this, tr("Failed to open file"),
-				  tr("<b>File open failed</b><p>Audio file \"%1\" could not be opened").arg(path));
-	}
+            QMessageBox::critical(this, tr("Failed to open file"),
+                                  tr("<b>File open failed</b><p>Audio file \"%1\" could not be opened").arg(path));
+        }
     }
 }
 
@@ -2612,19 +2758,19 @@
 
     if (selections.size() == 1) {
 
-	QStringList items;
-	items << tr("Export the selected region only")
-	      << tr("Export the whole audio file");
-	
-	bool ok = false;
-	QString item = ListInputDialog::getItem
-	    (this, tr("Select region to export"),
-	     tr("Which region from the original audio file do you want to export?"),
-	     items, 0, &ok);
-	
-	if (!ok || item.isEmpty()) return;
-	
-	if (item == items[0]) selectionToWrite = &ms;
+        QStringList items;
+        items << tr("Export the selected region only")
+              << tr("Export the whole audio file");
+        
+        bool ok = false;
+        QString item = ListInputDialog::getItem
+            (this, tr("Select region to export"),
+             tr("Which region from the original audio file do you want to export?"),
+             items, 0, &ok);
+        
+        if (!ok || item.isEmpty()) return;
+        
+        if (item == items[0]) selectionToWrite = &ms;
 
     } else if (selections.size() > 1) {
 
@@ -2639,7 +2785,7 @@
                 (this, tr("Select region to export"),
                  tr("Multiple regions of the original audio file are selected.\nWhat do you want to export?"),
                  items, 0, &ok);
-	    
+            
             if (!ok || item.isEmpty()) return;
             
             if (item == items[0]) {
@@ -2654,46 +2800,54 @@
 
         if (multiple) { // Can only happen when asData false
 
-	    int n = 1;
-	    QString base = path;
-	    base.replace(".wav", "");
-
-	    for (MultiSelection::SelectionList::iterator i = selections.begin();
-		 i != selections.end(); ++i) {
-
-		MultiSelection subms;
-		subms.setSelection(*i);
-
-		QString subpath = QString("%1.%2.wav").arg(base).arg(n);
-		++n;
-
-		if (QFileInfo(subpath).exists()) {
-		    error = tr("Fragment file %1 already exists, aborting").arg(subpath);
-		    break;
-		}
-
-		WavFileWriter subwriter(subpath,
+            int n = 1;
+            QString base = path;
+            base.replace(".wav", "");
+
+            for (MultiSelection::SelectionList::iterator i = selections.begin();
+                 i != selections.end(); ++i) {
+
+                MultiSelection subms;
+                subms.setSelection(*i);
+
+                QString subpath = QString("%1.%2.wav").arg(base).arg(n);
+                ++n;
+
+                if (QFileInfo(subpath).exists()) {
+                    error = tr("Fragment file %1 already exists, aborting").arg(subpath);
+                    break;
+                }
+
+                WavFileWriter subwriter(subpath,
                                         model->getSampleRate(),
                                         model->getChannelCount(),
                                         WavFileWriter::WriteToTemporary);
                 subwriter.writeModel(model, &subms);
-		ok = subwriter.isOK();
-
-		if (!ok) {
-		    error = subwriter.getError();
-		    break;
-		}
-	    }
-	}
+                ok = subwriter.isOK();
+
+                if (!ok) {
+                    error = subwriter.getError();
+                    break;
+                }
+            }
+        }
     }
 
     if (!multiple) {
         if (asData) {
-            CSVFileWriter writer(path, model,
+            stop();
+            ProgressDialog dialog {
+                QObject::tr("Exporting audio data..."),
+                true,
+                0,
+                this,
+                Qt::ApplicationModal
+            };
+            CSVFileWriter writer(path, model, &dialog,
                                  ((QFileInfo(path).suffix() == "csv") ?
                                   "," : "\t"));
             if (selectionToWrite) {
-                writer.writeSelection(selectionToWrite);
+                writer.writeSelection(*selectionToWrite);
             } else {
                 writer.write();
             }
@@ -2718,7 +2872,70 @@
             m_recentFiles.addFile(path);
         }
     } else {
-	QMessageBox::critical(this, tr("Failed to write file"), error);
+        QMessageBox::critical(this, tr("Failed to write file"), error);
+    }
+}
+
+void
+MainWindow::convertAudio()
+{
+    QString path = getOpenFileName(FileFinder::CSVFile);
+    if (path == "") return;
+
+    sv_samplerate_t defaultRate = 44100;
+    
+    CSVFormat format(path);
+    format.setModelType(CSVFormat::WaveFileModel);
+    format.setTimingType(CSVFormat::ImplicitTiming);
+    format.setTimeUnits(CSVFormat::TimeAudioFrames);
+    format.setSampleRate(defaultRate); // as a default for the dialog
+
+    {
+        CSVAudioFormatDialog *dialog = new CSVAudioFormatDialog(this, format);
+        if (dialog->exec() != QDialog::Accepted) {
+            delete dialog;
+            return;
+        }
+        format = dialog->getFormat();
+        delete dialog;
+    }
+    
+    FileOpenStatus status = FileOpenSucceeded;
+
+    ProgressDialog *progress = new ProgressDialog
+        (tr("Converting audio data..."), true, 0, this, Qt::ApplicationModal);
+    
+    WaveFileModel *model = qobject_cast<WaveFileModel *>
+        (DataFileReaderFactory::loadCSV
+         (path, format,
+          getMainModel() ? getMainModel()->getSampleRate() : defaultRate,
+          progress));
+
+    if (progress->wasCancelled()) {
+
+        delete model;
+        status = FileOpenCancelled;
+
+    } else if (!model || !model->isOK()) {
+
+        delete model;
+        status = FileOpenFailed;
+
+    } else {
+
+        status = addOpenedAudioModel(path,
+                                     model,
+                                     CreateAdditionalModel,
+                                     getDefaultSessionTemplate(),
+                                     false);
+    }
+
+    delete progress;
+    
+    if (status == FileOpenFailed) {
+        emit hideSplash();
+        QMessageBox::critical(this, tr("Failed to open file"),
+                              tr("<b>File open failed</b><p>Audio data file %1 could not be opened.").arg(path));
     }
 }
 
@@ -2728,15 +2945,15 @@
     Pane *pane = m_paneStack->getCurrentPane();
     
     if (!pane) {
-	// shouldn't happen, as the menu action should have been disabled
-	cerr << "WARNING: MainWindow::importLayer: no current pane" << endl;
-	return;
+        // shouldn't happen, as the menu action should have been disabled
+        cerr << "WARNING: MainWindow::importLayer: no current pane" << endl;
+        return;
     }
 
     if (!getMainModel()) {
-	// shouldn't happen, as the menu action should have been disabled
-	cerr << "WARNING: MainWindow::importLayer: No main model -- hence no default sample rate available" << endl;
-	return;
+        // shouldn't happen, as the menu action should have been disabled
+        cerr << "WARNING: MainWindow::importLayer: No main model -- hence no default sample rate available" << endl;
+        return;
     }
 
     QString path = getOpenFileName(FileFinder::LayerFile);
@@ -2860,17 +3077,15 @@
     if (!pane) return;
     
     QString path = getSaveFileName(FileFinder::ImageFile);
-
     if (path == "") return;
-
     if (QFileInfo(path).suffix() == "") path += ".png";
-
+    
     bool haveSelection = m_viewManager && !m_viewManager->getSelections().empty();
 
     QSize total, visible, selected;
-    total = pane->getImageSize();
-    visible = pane->getImageSize(pane->getFirstVisibleFrame(),
-                                 pane->getLastVisibleFrame());
+    total = pane->getRenderedImageSize();
+    visible = pane->getRenderedPartImageSize(pane->getFirstVisibleFrame(),
+                                             pane->getLastVisibleFrame());
 
     sv_frame_t sf0 = 0, sf1 = 0;
  
@@ -2880,7 +3095,7 @@
         MultiSelection::SelectionList::iterator e = selections.end();
         --e;
         sf1 = e->getEndFrame();
-        selected = pane->getImageSize(sf0, sf1);
+        selected = pane->getRenderedPartImageSize(sf0, sf1);
     }
 
     QStringList items;
@@ -2909,7 +3124,7 @@
     if (!haveSelection) {
         lid->setItemAvailability(2, false);
     }
-    if (total.width() > 32767) { // appears to be the limit of a QImage
+    if (total.width() > 32767) { // appears to be limit of a QImage
         lid->setItemAvailability(0, false);
         lid->setFootnote(tr("Note: the whole pane is too wide to be exported as a single image."));
     }
@@ -2917,24 +3132,24 @@
     bool ok = lid->exec();
     QString item = lid->getCurrentString();
     delete lid;
-	    
+            
     if (!ok || item.isEmpty()) return;
 
     settings.setValue("lastimageexportregion", deflt);
 
     QImage *image = 0;
-
+    
     if (item == items[0]) {
-        image = pane->toNewImage();
+        image = pane->renderToNewImage();
     } else if (item == items[1]) {
-        image = pane->toNewImage(pane->getFirstVisibleFrame(),
-                                 pane->getLastVisibleFrame());
+        image = pane->renderPartToNewImage(pane->getFirstVisibleFrame(),
+                                           pane->getLastVisibleFrame());
     } else if (haveSelection) {
-        image = pane->toNewImage(sf0, sf1);
+        image = pane->renderPartToNewImage(sf0, sf1);
     }
-
+    
     if (!image) return;
-
+    
     if (!image->save(path, "PNG")) {
         QMessageBox::critical(this, tr("Failed to save image file"),
                               tr("Failed to save image file %1").arg(path));
@@ -2944,11 +3159,79 @@
 }
 
 void
+MainWindow::exportSVG()
+{
+    Pane *pane = m_paneStack->getCurrentPane();
+    if (!pane) return;
+    
+    QString path = getSaveFileName(FileFinder::SVGFile);
+    if (path == "") return;
+    if (QFileInfo(path).suffix() == "") path += ".svg";
+
+    bool haveSelection = m_viewManager && !m_viewManager->getSelections().empty();
+
+    sv_frame_t sf0 = 0, sf1 = 0;
+ 
+    if (haveSelection) {
+        MultiSelection::SelectionList selections = m_viewManager->getSelections();
+        sf0 = selections.begin()->getStartFrame();
+        MultiSelection::SelectionList::iterator e = selections.end();
+        --e;
+        sf1 = e->getEndFrame();
+    }
+
+    QStringList items;
+    items << tr("Export the whole pane");
+    items << tr("Export the visible area only");
+    items << tr("Export the selection extent");
+
+    QSettings settings;
+    settings.beginGroup("MainWindow");
+    int deflt = settings.value("lastsvgexportregion", 0).toInt();
+    if (deflt == 2 && !haveSelection) deflt = 1;
+
+    ListInputDialog *lid = new ListInputDialog
+        (this, tr("Select region to export"),
+         tr("Which region of the current pane do you want to export as a scalable SVG image?"),
+         items, deflt);
+
+    if (!haveSelection) {
+        lid->setItemAvailability(2, false);
+    }
+
+    bool ok = lid->exec();
+    QString item = lid->getCurrentString();
+    delete lid;
+            
+    if (!ok || item.isEmpty()) return;
+
+    settings.setValue("lastsvgexportregion", deflt);
+
+    bool result = false;
+        
+    if (item == items[0]) {
+        result = pane->renderToSvgFile(path );
+    } else if (item == items[1]) {
+        result = pane->renderPartToSvgFile(path,
+                                           pane->getFirstVisibleFrame(),
+                                           pane->getLastVisibleFrame());
+    } else if (haveSelection) {
+        result = pane->renderPartToSvgFile(path, sf0, sf1);
+    }
+    
+    if (!result) {
+        QMessageBox::critical(this, tr("Failed to save SVG file"),
+                              tr("Failed to save SVG file %1").arg(path));
+    }
+}
+
+void
 MainWindow::browseRecordedAudio()
 {
     if (!m_recordTarget) return;
 
-    QString path = m_recordTarget->getRecordFolder();
+    QString path = RecordDirectory::getRecordContainerDirectory();
+    if (path == "") path = RecordDirectory::getRecordDirectory();
     if (path == "") return;
 
     openLocalFolder(path);
@@ -2968,8 +3251,8 @@
             this, SLOT(contextHelpChanged(const QString &)));
 
     if (!m_timeRulerLayer) {
-	m_timeRulerLayer = m_document->createMainModelLayer
-	    (LayerFactory::TimeRuler);
+        m_timeRulerLayer = m_document->createMainModelLayer
+            (LayerFactory::TimeRuler);
     }
 
     m_document->addLayerToView(pane, m_timeRulerLayer);
@@ -3001,29 +3284,29 @@
 
     while (m_paneStack->getPaneCount() > 0) {
 
-	Pane *pane = m_paneStack->getPane(m_paneStack->getPaneCount() - 1);
-
-	while (pane->getLayerCount() > 0) {
-	    m_document->removeLayerFromView
-		(pane, pane->getLayer(pane->getLayerCount() - 1));
-	}
-
-	m_overview->unregisterView(pane);
-	m_paneStack->deletePane(pane);
+        Pane *pane = m_paneStack->getPane(m_paneStack->getPaneCount() - 1);
+
+        while (pane->getLayerCount() > 0) {
+            m_document->removeLayerFromView
+                (pane, pane->getLayer(pane->getLayerCount() - 1));
+        }
+
+        m_overview->unregisterView(pane);
+        m_paneStack->deletePane(pane);
     }
 
     while (m_paneStack->getHiddenPaneCount() > 0) {
 
-	Pane *pane = m_paneStack->getHiddenPane
-	    (m_paneStack->getHiddenPaneCount() - 1);
-
-	while (pane->getLayerCount() > 0) {
-	    m_document->removeLayerFromView
-		(pane, pane->getLayer(pane->getLayerCount() - 1));
-	}
-
-	m_overview->unregisterView(pane);
-	m_paneStack->deletePane(pane);
+        Pane *pane = m_paneStack->getHiddenPane
+            (m_paneStack->getHiddenPaneCount() - 1);
+
+        while (pane->getLayerCount() > 0) {
+            m_document->removeLayerFromView
+                (pane, pane->getLayer(pane->getLayerCount() - 1));
+        }
+
+        m_overview->unregisterView(pane);
+        m_paneStack->deletePane(pane);
     }
 
     delete m_layerTreeDialog.data();
@@ -3111,9 +3394,9 @@
     QAction *action = dynamic_cast<QAction *>(obj);
     
     if (!action) {
-	cerr << "WARNING: MainWindow::openRecentFile: sender is not an action"
-		  << endl;
-	return;
+        cerr << "WARNING: MainWindow::openRecentFile: sender is not an action"
+                  << endl;
+        return;
     }
 
     QString path = action->text();
@@ -3142,9 +3425,9 @@
     QAction *action = qobject_cast<QAction *>(s);
 
     if (!action) {
-	cerr << "WARNING: MainWindow::applyTemplate: sender is not an action"
-		  << endl;
-	return;
+        cerr << "WARNING: MainWindow::applyTemplate: sender is not an action"
+                  << endl;
+        return;
     }
 
     QString n = action->objectName();
@@ -3203,6 +3486,7 @@
                                      tr("<b>Template file exists</b><p>The template \"%1\" already exists.<br>Overwrite it?").arg(name),
                                      QMessageBox::Ok | QMessageBox::Cancel,
                                      QMessageBox::Cancel) != QMessageBox::Ok) {
+                delete d;
                 return;
             }
         }
@@ -3213,13 +3497,15 @@
             }
         }
     }
+
+    delete d;
 }
 
 void
 MainWindow::manageSavedTemplates()
 {
     ResourceFinder rf;
-    QDesktopServices::openUrl("file:" + rf.getResourceSaveDir("templates"));
+    openLocalFolder(rf.getResourceSaveDir("templates"));
 }
 
 void
@@ -3297,14 +3583,14 @@
 
     if (m_openingAudioFile) {
 //        cerr << "Busy - ignoring close event" << endl;
-	e->ignore();
-	return;
+        e->ignore();
+        return;
     }
 
     if (!m_abandoning && !checkSaveModified()) {
 //        cerr << "Close refused by user - ignoring close event" << endl;
-	e->ignore();
-	return;
+        e->ignore();
+        return;
     }
 
     QSettings settings;
@@ -3318,8 +3604,7 @@
 
     if (m_preferencesDialog &&
         m_preferencesDialog->isVisible()) {
-        closeSession(); // otherwise we'll have to wait for prefs changes
-        m_preferencesDialog->applicationClosing(false);
+        m_preferencesDialog->applicationClosing(true);
     }
 
     closeSession();
@@ -3393,22 +3678,22 @@
     emit hideSplash();
 
     int button = 
-	QMessageBox::warning(this,
-			     tr("Session modified"),
-			     tr("<b>Session modified</b><p>The current session has been modified.<br>Do you want to save it?"),
-			     QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
+        QMessageBox::warning(this,
+                             tr("Session modified"),
+                             tr("<b>Session modified</b><p>The current session has been modified.<br>Do you want to save it?"),
+                             QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
                              QMessageBox::Yes);
 
     if (button == QMessageBox::Yes) {
-	saveSession();
-	if (m_documentModified) { // save failed -- don't proceed!
-	    return false;
-	} else {
+        saveSession();
+        if (m_documentModified) { // save failed -- don't proceed!
+            return false;
+        } else {
             return true; // saved, so it's safe to continue now
         }
     } else if (button == QMessageBox::No) {
-	m_documentModified = false; // so we know to abandon it
-	return true;
+        m_documentModified = false; // so we know to abandon it
+        return true;
     }
 
     // else cancel
@@ -3455,15 +3740,15 @@
 MainWindow::saveSession()
 {
     if (m_sessionFile != "") {
-	if (!saveSessionFile(m_sessionFile)) {
-	    QMessageBox::critical(this, tr("Failed to save file"),
-				  tr("<b>Save failed</b><p>Session file \"%1\" could not be saved.").arg(m_sessionFile));
-	} else {
-	    CommandHistory::getInstance()->documentSaved();
-	    documentRestored();
-	}
+        if (!saveSessionFile(m_sessionFile)) {
+            QMessageBox::critical(this, tr("Failed to save file"),
+                                  tr("<b>Save failed</b><p>Session file \"%1\" could not be saved.").arg(m_sessionFile));
+        } else {
+            CommandHistory::getInstance()->documentSaved();
+            documentRestored();
+        }
     } else {
-	saveSessionAs();
+        saveSessionAs();
     }
 }
 
@@ -3479,15 +3764,15 @@
     if (path == "") return;
 
     if (!saveSessionFile(path)) {
-	QMessageBox::critical(this, tr("Failed to save file"),
-			      tr("<b>Save failed</b><p>Session file \"%1\" could not be saved.").arg(path));
+        QMessageBox::critical(this, tr("Failed to save file"),
+                              tr("<b>Save failed</b><p>Session file \"%1\" could not be saved.").arg(path));
     } else {
-	setWindowTitle(tr("%1: %2")
+        setWindowTitle(tr("%1: %2")
                        .arg(QApplication::applicationName())
-		       .arg(QFileInfo(path).fileName()));
-	m_sessionFile = path;
-	CommandHistory::getInstance()->documentSaved();
-	documentRestored();
+                       .arg(QFileInfo(path).fileName()));
+        m_sessionFile = path;
+        CommandHistory::getInstance()->documentSaved();
+        documentRestored();
         m_recentFiles.addFile(path);
         emit activity(tr("Save session as \"%1\"").arg(path));
     }
@@ -3498,18 +3783,33 @@
 {
     MainWindowBase::preferenceChanged(name);
 
-    if (name == "Background Mode" && m_viewManager) {
-        if (m_viewManager->getGlobalDarkBackground()) {
-            m_panLayer->setBaseColour
-                (ColourDatabase::getInstance()->getColourIndex(tr("Bright Green")));
-        } else {
-            m_panLayer->setBaseColour
-                (ColourDatabase::getInstance()->getColourIndex(tr("Green")));
-        }      
+    if (name == "Background Mode") {
+        coloursChanged();
     }     
 }
 
 void
+MainWindow::coloursChanged()
+{
+    QSettings settings;
+    settings.beginGroup("Preferences");
+    QString defaultColourName(tr("Green"));
+    if (m_viewManager && m_viewManager->getGlobalDarkBackground()) {
+        defaultColourName = tr("Bright Green");
+    }
+    ColourDatabase *cdb = ColourDatabase::getInstance();
+    QColor colour = QColor
+        (settings.value("overview-colour",
+                        cdb->getColour(defaultColourName).name()).toString());
+    settings.endGroup();
+
+    int index = cdb->getColourIndex(colour);
+    if (index >= 0) {
+        m_panLayer->setBaseColour(index);
+    }
+}
+
+void
 MainWindow::propertyStacksResized(int width)
 {
 //    SVDEBUG << "MainWindow::propertyStacksResized(" << width << ")" << endl;
@@ -3532,22 +3832,22 @@
     cerr << "addPane: sender is " << s << ", action is " << action << ", name " << action->text() << endl;
     
     if (!action) {
-	cerr << "WARNING: MainWindow::addPane: sender is not an action"
-		  << endl;
-	return;
+        cerr << "WARNING: MainWindow::addPane: sender is not an action"
+                  << endl;
+        return;
     }
 
     PaneActionMap::iterator i = m_paneActions.find(action);
 
     if (i == m_paneActions.end()) {
-	cerr << "WARNING: MainWindow::addPane: unknown action "
-		  << action->objectName() << endl;
+        cerr << "WARNING: MainWindow::addPane: unknown action "
+                  << action->objectName() << endl;
         cerr << "known actions are:" << endl;
         for (PaneActionMap::const_iterator i = m_paneActions.begin();
              i != m_paneActions.end(); ++i) {
             cerr << i->first << ", name " << i->first->text() << endl;
         }
-	return;
+        return;
     }
 
     addPane(i->second, action->text());
@@ -3572,15 +3872,15 @@
     if (configuration.layer != LayerFactory::TimeRuler &&
         configuration.layer != LayerFactory::Spectrum) {
 
-	if (!m_timeRulerLayer) {
-//	    cerr << "no time ruler layer, creating one" << endl;
-	    m_timeRulerLayer = m_document->createMainModelLayer
-		(LayerFactory::TimeRuler);
-	}
-
-//	SVDEBUG << "adding time ruler layer " << m_timeRulerLayer << endl;
-
-	m_document->addLayerToView(pane, m_timeRulerLayer);
+        if (!m_timeRulerLayer) {
+//            cerr << "no time ruler layer, creating one" << endl;
+            m_timeRulerLayer = m_document->createMainModelLayer
+                (LayerFactory::TimeRuler);
+        }
+
+//        SVDEBUG << "adding time ruler layer " << m_timeRulerLayer << endl;
+
+        m_document->addLayerToView(pane, m_timeRulerLayer);
     }
 
     Layer *newLayer = m_document->createLayer(configuration.layer);
@@ -3634,25 +3934,25 @@
     QAction *action = dynamic_cast<QAction *>(s);
     
     if (!action) {
-	cerr << "WARNING: MainWindow::addLayer: sender is not an action"
-		  << endl;
-	return;
+        cerr << "WARNING: MainWindow::addLayer: sender is not an action"
+                  << endl;
+        return;
     }
 
     Pane *pane = m_paneStack->getCurrentPane();
     
     if (!pane) {
-	cerr << "WARNING: MainWindow::addLayer: no current pane" << endl;
-	return;
+        cerr << "WARNING: MainWindow::addLayer: no current pane" << endl;
+        return;
     }
 
     ExistingLayerActionMap::iterator ei = m_existingLayerActions.find(action);
 
     if (ei != m_existingLayerActions.end()) {
-	Layer *newLayer = ei->second;
-	m_document->addLayerToView(pane, newLayer);
-	m_paneStack->setCurrentLayer(pane, newLayer);
-	return;
+        Layer *newLayer = ei->second;
+        m_document->addLayerToView(pane, newLayer);
+        m_paneStack->setCurrentLayer(pane, newLayer);
+        return;
     }
 
     ei = m_sliceActions.find(action);
@@ -3670,38 +3970,38 @@
             connect(m_document, SIGNAL(modelAboutToBeDeleted(Model *)),
                     dest, SLOT(modelAboutToBeDeleted(Model *)));
         }
-	m_document->addLayerToView(pane, newLayer);
-	m_paneStack->setCurrentLayer(pane, newLayer);
-	return;
+        m_document->addLayerToView(pane, newLayer);
+        m_paneStack->setCurrentLayer(pane, newLayer);
+        return;
     }
 
     TransformActionMap::iterator i = m_transformActions.find(action);
 
     if (i == m_transformActions.end()) {
 
-	LayerActionMap::iterator i = m_layerActions.find(action);
-	
-	if (i == m_layerActions.end()) {
-	    cerr << "WARNING: MainWindow::addLayer: unknown action "
-		      << action->objectName() << endl;
-	    return;
-	}
-
-	LayerFactory::LayerType type = i->second.layer;
-	
-	LayerFactory::LayerTypeSet emptyTypes =
-	    LayerFactory::getInstance()->getValidEmptyLayerTypes();
-
-	Layer *newLayer = 0;
-
-	if (emptyTypes.find(type) != emptyTypes.end()) {
-
-	    newLayer = m_document->createEmptyLayer(type);
+        LayerActionMap::iterator i = m_layerActions.find(action);
+        
+        if (i == m_layerActions.end()) {
+            cerr << "WARNING: MainWindow::addLayer: unknown action "
+                      << action->objectName() << endl;
+            return;
+        }
+
+        LayerFactory::LayerType type = i->second.layer;
+        
+        LayerFactory::LayerTypeSet emptyTypes =
+            LayerFactory::getInstance()->getValidEmptyLayerTypes();
+
+        Layer *newLayer = 0;
+
+        if (emptyTypes.find(type) != emptyTypes.end()) {
+
+            newLayer = m_document->createEmptyLayer(type);
             if (newLayer) {
                 m_toolActions[ViewManager::DrawMode]->trigger();
             }
 
-	} else {
+        } else {
 
             Model *model = i->second.sourceModel;
 
@@ -3746,7 +4046,7 @@
             m_paneStack->setCurrentLayer(pane, newLayer);
         }
 
-	return;
+        return;
     }
 
     //!!! want to do something like this, but it's not supported in
@@ -3755,11 +4055,11 @@
     int channel = -1;
     // pick up the default channel from any existing layers on the same pane
     for (int j = 0; j < pane->getLayerCount(); ++j) {
-	int c = LayerFactory::getInstance()->getChannel(pane->getLayer(j));
-	if (c != -1) {
-	    channel = c;
-	    break;
-	}
+        int c = LayerFactory::getInstance()->getChannel(pane->getLayer(j));
+        if (c != -1) {
+            channel = c;
+            break;
+        }
     }
     */
 
@@ -3777,12 +4077,21 @@
 {
     Pane *pane = m_paneStack->getCurrentPane();
     if (!pane) {
-	cerr << "WARNING: MainWindow::addLayer: no current pane" << endl;
-	return;
+        cerr << "WARNING: MainWindow::addLayer: no current pane" << endl;
+        return;
     }
 
-    Transform transform = TransformFactory::getInstance()->
-        getDefaultTransformFor(transformId);
+    Transform transform;
+    try {
+        transform = TransformFactory::getInstance()->
+            getDefaultTransformFor(transformId);
+    } catch (std::exception &e) { // e.g. Piper server failure
+        QMessageBox::critical
+            (this, tr("Failed to query transform attributes"),
+             tr("<b>Failed to query transform attributes</b><p>Plugin or server error: %1</p>")
+             .arg(e.what()));
+        return;
+    }
 
     std::vector<Model *> candidateInputModels =
         m_document->getTransformInputModels();
@@ -3811,6 +4120,8 @@
         if (defaultInputModel) break;
     }
 
+    AggregateWaveModel *aggregate = 0;
+    
     if (candidateInputModels.size() > 1) {
         // Add an aggregate model as another option
         AggregateWaveModel::ChannelSpecList sl;
@@ -3822,10 +4133,9 @@
             }
         }
         if (!sl.empty()) {
-            AggregateWaveModel *aggregate = new AggregateWaveModel(sl);
+            aggregate = new AggregateWaveModel(sl);
             aggregate->setObjectName(tr("Multiplex all of the above"));
             candidateInputModels.push_back(aggregate);
-            //!!! but it leaks
         }
     }
     
@@ -3847,19 +4157,36 @@
          duration,
          &configurator);
 
+    if (aggregate) {
+        if (input.getModel() == aggregate) {
+            aggregate->setObjectName(tr("Multiplexed audio"));
+            m_document->addAggregateModel(aggregate);
+        } else {
+            aggregate->aboutToDelete();
+            delete aggregate;
+        }
+    }
+    
     if (!input.getModel()) return;
 
 //    SVDEBUG << "MainWindow::addLayer: Input model is " << input.getModel() << " \"" << input.getModel()->objectName() << "\"" << endl << "transform:" << endl << transform.toXmlString() << endl;
 
-    Layer *newLayer = m_document->createDerivedLayer(transform, input);
-
-    if (newLayer) {
-        m_document->addLayerToView(pane, newLayer);
-        m_document->setChannel(newLayer, input.getChannel());
-        m_recentTransforms.add(transformId);
-        m_paneStack->setCurrentLayer(pane, newLayer);
+    try {
+        Layer *newLayer = m_document->createDerivedLayer(transform, input);
+        if (newLayer) {
+            m_document->addLayerToView(pane, newLayer);
+            m_document->setChannel(newLayer, input.getChannel());
+            m_recentTransforms.add(transformId);
+            m_paneStack->setCurrentLayer(pane, newLayer);
+        }
+    } catch (std::exception &e) { // e.g. Piper server failure
+        QMessageBox::critical
+            (this, tr("Transform failed"),
+             tr("<b>Failed to run transform</b><p>Plugin or server error: %1</p>")
+             .arg(e.what()));
+        return;
     }
-
+    
     updateMenuStates();
 }
 
@@ -3868,18 +4195,18 @@
 {
     Pane *pane = m_paneStack->getCurrentPane();
     if (pane) {
-	Layer *layer = pane->getSelectedLayer();
-	if (layer) {
-	    bool ok = false;
-	    QString newName = QInputDialog::getText
-		(this, tr("Rename Layer"),
-		 tr("New name for this layer:"),
-		 QLineEdit::Normal, layer->objectName(), &ok);
-	    if (ok) {
-		layer->setPresentationName(newName);
-		setupExistingLayersMenus();
-	    }
-	}
+        Layer *layer = pane->getSelectedLayer();
+        if (layer) {
+            bool ok = false;
+            QString newName = QInputDialog::getText
+                (this, tr("Rename Layer"),
+                 tr("New name for this layer:"),
+                 QLineEdit::Normal, layer->objectName(), &ok);
+            if (ok) {
+                layer->setPresentationName(newName);
+                setupExistingLayersMenus();
+            }
+        }
     }
 }
 
@@ -3914,9 +4241,9 @@
     if (!m_viewManager) return;
 
     if (action) {
-	m_viewManager->setAlignMode(action->isChecked());
+        m_viewManager->setAlignMode(action->isChecked());
     } else {
-	m_viewManager->setAlignMode(!m_viewManager->getAlignMode());
+        m_viewManager->setAlignMode(!m_viewManager->getAlignMode());
     }
 
     if (m_viewManager->getAlignMode()) {
@@ -3942,8 +4269,8 @@
 
     for (int i = 0; i < m_paneStack->getPaneCount(); ++i) {
 
-	Pane *pane = m_paneStack->getPane(i);
-	if (!pane) continue;
+        Pane *pane = m_paneStack->getPane(i);
+        if (!pane) continue;
 
         pane->update();
     }
@@ -4036,24 +4363,29 @@
         }
     }
 
-    if (containsMainModel) {
-        m_panLayer->setModel(getMainModel());
-        return;
-    }
-
+    bool panLayerSet = false;
+    
     for (int i = pane->getLayerCount(); i > 0; ) {
         --i;
         Layer *layer = pane->getLayer(i);
-        if (LayerFactory::getInstance()->getLayerType(layer) ==
-            LayerFactory::Waveform) {
-            RangeSummarisableTimeValueModel *tvm = 
-                dynamic_cast<RangeSummarisableTimeValueModel *>(layer->getModel());
-            if (tvm) {
+        RangeSummarisableTimeValueModel *tvm = 
+            qobject_cast<RangeSummarisableTimeValueModel *>(layer->getModel());
+        if (tvm) {
+            auto type = LayerFactory::getInstance()->getLayerType(layer);
+            if (type != LayerFactory::TimeRuler) {
+                updateLayerShortcutsFor(tvm);
+            }
+            if (type == LayerFactory::Waveform) {
                 m_panLayer->setModel(tvm);
-                return;
+                panLayerSet = true;
+                break;
             }
         }
     }
+
+    if (containsMainModel && !panLayerSet) {
+        m_panLayer->setModel(getMainModel());
+    }
 }
 
 void
@@ -4137,10 +4469,9 @@
 }
 
 void
-MainWindow::outputLevelsChanged(float left, float right)
+MainWindow::monitoringLevelsChanged(float left, float right)
 {
-    m_fader->setPeakLeft(left);
-    m_fader->setPeakRight(right);
+    m_mainLevelPan->setMonitoringLevels(left, right);
 }
 
 void
@@ -4178,6 +4509,16 @@
     shownOnce = true;
 }
 
+/*
+void
+MainWindow::betaReleaseWarning()
+{
+    QMessageBox::information
+        (this, tr("Beta release"),
+         tr("<b>This is a beta release of Sonic Visualiser</b><p>Please see the \"What's New\" option in the Help menu for a list of changes since the last proper release.</p>"));
+}
+*/
+
 void
 MainWindow::pluginPopulationWarning()
 {
@@ -4270,7 +4611,9 @@
             SparseTimeValueModel *tvm =
                 dynamic_cast<SparseTimeValueModel *>(model);
             if (tvm) {
-                SparseTimeValueModel::Point point(frame, ev.getPitch() % 12, "");
+                SparseTimeValueModel::Point point(frame,
+                                                  float(ev.getPitch() % 12),
+                                                  "");
                 SparseTimeValueModel::AddPointCommand *command =
                     new SparseTimeValueModel::AddPointCommand
                     (tvm, point, tr("Add Point"));
@@ -4336,8 +4679,10 @@
     MainWindowBase::mainModelChanged(model);
 
     if (m_playTarget || m_audioIO) {
-        connect(m_fader, SIGNAL(valueChanged(float)),
+        connect(m_mainLevelPan, SIGNAL(levelChanged(float)),
                 this, SLOT(mainModelGainChanged(float)));
+        connect(m_mainLevelPan, SIGNAL(panChanged(float)),
+                this, SLOT(mainModelPanChanged(float)));
     }
 }
 
@@ -4352,6 +4697,17 @@
 }
 
 void
+MainWindow::mainModelPanChanged(float balance)
+{
+    // this is indeed stereo balance rather than pan
+    if (m_playTarget) {
+        m_playTarget->setOutputBalance(balance);
+    } else if (m_audioIO) {
+        m_audioIO->setOutputBalance(balance);
+    }
+}
+
+void
 MainWindow::modelAboutToBeDeleted(Model *model)
 {
     if (model == m_panLayer->getModel()) {
@@ -4592,6 +4948,11 @@
 
     m_preferencesDialog = new PreferencesDialog(this);
 
+    connect(m_preferencesDialog, SIGNAL(audioDeviceChanged()),
+            this, SLOT(recreateAudioIO()));
+    connect(m_preferencesDialog, SIGNAL(coloursChanged()),
+            this, SLOT(coloursChanged()));
+    
     // DeleteOnClose is safe here, because m_preferencesDialog is a
     // QPointer that will be zeroed when the dialog is deleted.  We
     // use it in preference to leaving the dialog lying around because
@@ -4612,8 +4973,8 @@
     QWidget *w = dynamic_cast<QWidget *>(sender());
     if (!w) return;
 
-    if (w == m_fader) {
-        contextHelpChanged(tr("Adjust the master playback level"));
+    if (w == m_mainLevelPan) {
+        contextHelpChanged(tr("Adjust the master playback level and pan"));
     } else if (w == m_playSpeed) {
         contextHelpChanged(tr("Adjust the master playback speed"));
     }
@@ -4638,7 +4999,62 @@
 }
 
 void
-MainWindow::about()
+MainWindow::whatsNew()
+{
+    QFile changelog(":CHANGELOG");
+    changelog.open(QFile::ReadOnly);
+    QByteArray content = changelog.readAll();
+    QString text = QString::fromUtf8(content);
+
+    QDialog *d = new QDialog(this);
+    d->setWindowTitle(tr("What's New"));
+        
+    QGridLayout *layout = new QGridLayout;
+    d->setLayout(layout);
+
+    int row = 0;
+    
+    QLabel *iconLabel = new QLabel;
+    iconLabel->setPixmap(QApplication::windowIcon().pixmap(64, 64));
+    layout->addWidget(iconLabel, row, 0);
+    
+    layout->addWidget
+        (new QLabel(tr("<h3>What's New in %1</h3>")
+                    .arg(QApplication::applicationName())),
+         row++, 1);
+    layout->setColumnStretch(2, 10);
+
+    QTextEdit *textEdit = new QTextEdit;
+    layout->addWidget(textEdit, row++, 1, 1, 2);
+
+    if (m_newerVersionIs != "") {
+        layout->addWidget(new QLabel(tr("<b>Note:</b> A newer version of Sonic Visualiser is available.<br>(Version %1 is available; you are using version %2)").arg(m_newerVersionIs).arg(SV_VERSION)), row++, 1, 1, 2);
+    }
+    
+    QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok);
+    layout->addWidget(bb, row++, 0, 1, 3);
+    connect(bb, SIGNAL(accepted()), d, SLOT(accept()));
+
+    text.replace(QRegExp("(.)\n +(.)"), "\\1 \\2");
+    text.replace(QRegExp("\n - ([^\n]+)"), "\n<li>\\1</li>");
+    text.replace(QRegExp(": *\n"), ":\n<ul>\n");
+    text.replace(QRegExp("</li>\n\\s*\n"), "</li>\n</ul>\n\n");
+    text.replace(QRegExp("\n(\\w[^:\n]+:)"), "\n<p><b>\\1</b></p>");
+//    text.replace(QRegExp("<li>([^,.\n]+)([,.] +\\w)"), "<li><b>\\1</b>\\2");
+    
+    textEdit->setHtml(text);
+    textEdit->setReadOnly(true);
+
+    d->setMinimumSize(m_viewManager->scalePixelSize(520),
+                      m_viewManager->scalePixelSize(450));
+    
+    d->exec();
+
+    delete d;
+}
+
+QString
+MainWindow::getReleaseText() const
 {
     bool debug = false;
     QString version = "(unknown version)";
@@ -4658,19 +5074,31 @@
 #endif // SVNREV
 #endif // SV_VERSION
 
-    QString aboutText;
-
-    aboutText += tr("<h3>About Sonic Visualiser</h3>");
-    aboutText += tr("<p>Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.<br><a href=\"http://www.sonicvisualiser.org/\">http://www.sonicvisualiser.org/</a></p>");
-    aboutText += tr("<p><small>%1 : %2 configuration, %3-bit build</small></p>")
+    return tr("%1 : %2 configuration, %3-bit build")
         .arg(version)
         .arg(debug ? tr("Debug") : tr("Release"))
         .arg(sizeof(void *) * 8);
-
-    aboutText += "<small>";
+}
+
+void
+MainWindow::about()
+{
+    QString aboutText;
+
+    aboutText += tr("<h3>About Sonic Visualiser</h3>");
+    aboutText += tr("<p>Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.<br><a href=\"http://www.sonicvisualiser.org/\">http://www.sonicvisualiser.org/</a></p>");
+    aboutText += QString("<p><small>%1</small></p>").arg(getReleaseText());
+
+    if (m_oscQueue && m_oscQueue->isOK()) {
+        aboutText += tr("</small><p><small>The OSC URL for this instance is: \"%1\"").arg(m_oscQueue->getOSCURL());
+    }
+
+    aboutText += "</small><p><small>";
 
     aboutText += tr("With Qt v%1 &copy; The Qt Company").arg(QT_VERSION_STR);
 
+    aboutText += "</small><small>";
+
 #ifdef HAVE_JACK
 #ifdef JACK_VERSION
     aboutText += tr("<br>With JACK audio output library v%1 &copy; Paul Davis and Jack O'Quin").arg(JACK_VERSION);
@@ -4731,6 +5159,7 @@
 #endif // RUBBERBAND_VERSION
 #endif // HAVE_RUBBERBAND
     aboutText += tr("<br>With Vamp plugin support (API v%1, host SDK v%2) &copy; Chris Cannam and QMUL").arg(VAMP_API_VERSION).arg(VAMP_SDK_VERSION);
+    aboutText += tr("<br>With Piper Vamp protocol bridge &copy; QMUL");
     aboutText += tr("<br>With LADSPA plugin support (API v%1) &copy; Richard Furse, Paul Davis, Stefan Westerfeld").arg(LADSPA_VERSION);
     aboutText += tr("<br>With DSSI plugin support (API v%1) &copy; Chris Cannam, Steve Harris, Sean Bolton").arg(DSSI_VERSION);
 #ifdef REDLAND_VERSION
@@ -4750,27 +5179,81 @@
     aboutText += tr("<br>With liblo Lite OSC library &copy; Steve Harris");
 #endif // LIBLO_VERSION
 
-    if (m_oscQueue && m_oscQueue->isOK()) {
-        aboutText += tr("</small><p><small>The OSC URL for this instance is: \"%1\"").arg(m_oscQueue->getOSCURL());
-    }
-
     aboutText += "</small></p>";
 #endif // HAVE_LIBLO
 
-#ifndef BUILD_STATIC
-    aboutText.replace(tr("With "), tr("Using "));
-#endif
+    aboutText += "<p><small>";
+    aboutText += tr("Russian UI translation contributed by Alexandre Prokoudine.");
+    aboutText += "<br>";
+    aboutText += tr("Czech UI translation contributed by Pavel Fric.");
+    aboutText += "</small></p>";
 
     aboutText += 
-        "<p><small>Sonic Visualiser Copyright &copy; 2005&ndash;2016 Chris Cannam and "
-        "Queen Mary, University of London.</small></p>"
+        "<p><small>Sonic Visualiser Copyright &copy; 2005&ndash;2018 Chris Cannam and "
+        "Queen Mary, University of London.</small></p>";
+
+    aboutText +=
         "<p><small>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.<br>See the file "
         "COPYING included with this distribution for more information.</small></p>";
+
+    // use our own dialog so we can influence the size
+
+    QDialog *d = new QDialog(this);
+
+    d->setWindowTitle(tr("About %1").arg(QApplication::applicationName()));
+        
+    QGridLayout *layout = new QGridLayout;
+    d->setLayout(layout);
+
+    int row = 0;
     
-    QMessageBox::about(this, tr("About Sonic Visualiser"), aboutText);
+    QLabel *iconLabel = new QLabel;
+    iconLabel->setPixmap(QApplication::windowIcon().pixmap(64, 64));
+    layout->addWidget(iconLabel, row, 0, Qt::AlignTop);
+
+    QLabel *mainText = new QLabel();
+    layout->addWidget(mainText, row, 1, 1, 2);
+
+    layout->setRowStretch(row, 10);
+    layout->setColumnStretch(1, 10);
+
+    ++row;
+
+    QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok);
+    layout->addWidget(bb, row++, 0, 1, 3);
+    connect(bb, SIGNAL(accepted()), d, SLOT(accept()));
+
+//    mainText->setHtml(aboutText);
+//    mainText->setReadOnly(true);
+    mainText->setWordWrap(true);
+    mainText->setOpenExternalLinks(true);
+    mainText->setText(aboutText);
+
+    d->setMinimumSize(m_viewManager->scalePixelSize(420),
+                      m_viewManager->scalePixelSize(200));
+    
+    d->exec();
+
+    delete d;
+    /*
+    QMessageBox about(QMessageBox::Information, 
+                      tr("About Sonic Visualiser"),
+                      aboutText,
+                      QMessageBox::StandardButtons(QMessageBox::Ok),
+                      this);
+
+    QIcon icon = QApplication::windowIcon();
+    QSize size = icon.actualSize(QSize(64, 64));
+    about.setIconPixmap(icon.pixmap(size));
+
+    about.setMinimumSize(m_viewManager->scalePixelSize(400),
+                         m_viewManager->scalePixelSize(400));
+
+    about.exec();
+    */
 }
 
 void
@@ -4782,6 +5265,8 @@
 void
 MainWindow::newerVersionAvailable(QString version)
 {
+    m_newerVersionIs = version;
+    
     QSettings settings;
     settings.beginGroup("NewerVersionWarning");
     QString tag = QString("version-%1-available-show").arg(version);
--- a/main/MainWindow.h	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/MainWindow.h	Mon Sep 17 14:05:41 2018 +0100
@@ -41,6 +41,8 @@
 
 public slots:
     virtual void preferenceChanged(PropertyContainer::PropertyName);
+    virtual void coloursChanged();
+
     virtual bool commitData(bool mayAskUser);
 
     void goFullScreen();
@@ -58,9 +60,11 @@
     virtual void applyTemplate();
     virtual void exportAudio();
     virtual void exportAudioData();
+    virtual void convertAudio();
     virtual void importLayer();
     virtual void exportLayer();
     virtual void exportImage();
+    virtual void exportSVG();
     virtual void browseRecordedAudio();
     virtual void saveSession();
     virtual void saveSessionAs();
@@ -130,13 +134,14 @@
     virtual void slowDownPlayback();
     virtual void restoreNormalPlayback();
 
-    virtual void outputLevelsChanged(float, float);
+    virtual void monitoringLevelsChanged(float, float);
 
     virtual void layerRemoved(Layer *);
     virtual void layerInAView(Layer *, bool);
 
     virtual void mainModelChanged(WaveFileModel *);
     virtual void mainModelGainChanged(float);
+    virtual void mainModelPanChanged(float);
     virtual void modelAdded(Model *);
     virtual void modelAboutToBeDeleted(Model *);
 
@@ -151,6 +156,9 @@
     virtual void midiEventsAvailable();
     virtual void playStatusChanged(bool);
 
+/*
+    virtual void betaReleaseWarning();
+*/
     virtual void pluginPopulationWarning();
 
     virtual void saveSessionAsTemplate();
@@ -159,12 +167,13 @@
     virtual void website();
     virtual void help();
     virtual void about();
+    virtual void whatsNew();
     virtual void keyReference();
     virtual void newerVersionAvailable(QString);
 
 protected:
     Overview                *m_overview;
-    Fader                   *m_fader;
+    LevelPanToolButton      *m_mainLevelPan;
     AudioDial               *m_playSpeed;
     WaveformLayer           *m_panLayer;
     
@@ -225,18 +234,22 @@
 
     Surveyer                *m_surveyer;
     VersionTester           *m_versionTester;
+    QString                  m_newerVersionIs;
 
     struct LayerConfiguration {
-	LayerConfiguration(LayerFactory::LayerType _layer
-			                       = LayerFactory::TimeRuler,
+        LayerConfiguration(LayerFactory::LayerType _layer
+                                               = LayerFactory::TimeRuler,
                            Model *_source = 0,
                            int _channel = -1) :
-	    layer(_layer), sourceModel(_source), channel(_channel) { }
-	LayerFactory::LayerType layer;
+            layer(_layer), sourceModel(_source), channel(_channel) { }
+        LayerFactory::LayerType layer;
         Model *sourceModel;
-	int channel;
+        int channel;
     };
 
+    QString shortcutFor(LayerFactory::LayerType, bool isPaneMenu);
+    void updateLayerShortcutsFor(Model *);
+    
     typedef std::map<QAction *, LayerConfiguration> PaneActionMap;
     PaneActionMap m_paneActions;
 
@@ -259,6 +272,8 @@
     typedef std::map<QAction *, int> NumberingActionMap;
     NumberingActionMap m_numberingActions;
 
+    QString getReleaseText() const;
+    
     virtual void setupMenus();
     virtual void setupFileMenu();
     virtual void setupEditMenu();
--- a/main/NetworkPermissionTester.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/NetworkPermissionTester.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -16,6 +16,8 @@
 
 #include "../version.h"
 
+#include "base/Debug.h"
+
 #include <QWidget>
 #include <QString>
 #include <QSettings>
@@ -37,47 +39,70 @@
     bool permish = false;
 
     if (settings.contains(tag)) {
-	permish = settings.value(tag, false).toBool();
+        permish = settings.value(tag, false).toBool();
+        SVDEBUG << "NetworkPermissionTester: Asked already, result was " << permish << endl;
     } else {
+        SVDEBUG << "NetworkPermissionTester: Asking for permission" << endl;
 
-	QDialog d;
-	d.setWindowTitle(QCoreApplication::translate("NetworkPermissionTester", "Welcome to Sonic Visualiser"));
+    QDialog d;
+        d.setWindowTitle(QCoreApplication::translate("NetworkPermissionTester", "Welcome to Sonic Visualiser"));
 
-	QGridLayout *layout = new QGridLayout;
-	d.setLayout(layout);
+        QGridLayout *layout = new QGridLayout;
+        d.setLayout(layout);
 
-	QLabel *label = new QLabel;
-	label->setWordWrap(true);
-	label->setText
-	    (QCoreApplication::translate
-	     ("NetworkPermissionTester",
-	      "<h2>Welcome to Sonic Visualiser!</h2>"
-	      "<p><img src=\":icons/qm-logo-smaller.png\" style=\"float:right\">Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.</p>"
-	      "<p>Developed in the Centre for Digital Music at Queen Mary, University of London, Sonic Visualiser is provided free as open source software under the GNU General Public License.</p>"
-              "<p><hr></p>"
-	      "<p><b>Before we go on...</b></p>"
-	      "<p>Sonic Visualiser would like to make networking connections and open a network port.</p>"
-	      "<p>This is to:</p>"
-	      "<ul><li> Find information about available and installed plugins;</li>"
-	      "<li> Support the use of Open Sound Control, where configured; and</li>"
-	      "<li> Tell you when updates are available.</li>"
-              "</ul>"
-	      "<p>No personal information will be sent, no tracking is carried out, and all requests happen in the background without interrupting your work.</p>"
-	      "<p>We recommend that you allow this, because it makes Sonic Visualiser more useful. But if you do not wish to do so, please un-check the box below.<br></p>"));
-	layout->addWidget(label, 0, 0);
+        QString preamble;
+        preamble = QCoreApplication::translate
+            ("NetworkPermissionTester",
+             "<h2>Welcome to Sonic Visualiser!</h2>"
+             "<p><img src=\":icons/qm-logo-smaller.png\" style=\"float:right\">Sonic Visualiser is a program for viewing and exploring audio data for semantic music analysis and annotation.</p>"
+             "<p>Developed in the Centre for Digital Music at Queen Mary University of London, Sonic Visualiser is open source software under the GNU General Public License.</p>"
+             "<p><hr></p>"
+             "<p><b>Before we go on...</b></p>"
+             "<p>Sonic Visualiser would like permission to use the network.</p>");
 
-	QCheckBox *cb = new QCheckBox(QCoreApplication::translate("NetworkPermissionTester", "Allow this"));
-	cb->setChecked(true);
-	layout->addWidget(cb, 1, 0);
-	
-	QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok);
-	QObject::connect(bb, SIGNAL(accepted()), &d, SLOT(accept()));
-	layout->addWidget(bb, 2, 0);
-	
-	d.exec();
+        QString bullets;
+        if (m_withOSC) {
+            bullets = QCoreApplication::translate
+                ("NetworkPermissionTester",
+                 "<p>This is to:</p>"
+                 "<ul><li> Find information about available and installed plugins;</li>"
+                 "<li> Support the use of Open Sound Control; and</li>"
+                 "<li> Tell you when updates are available.</li>"
+                 "</ul>");
+        } else {
+            bullets = QCoreApplication::translate
+                ("NetworkPermissionTester",
+                 "<p>This is to:</p>"
+                 "<ul><li> Find information about available and installed plugins; and</li>"
+                 "<li> Tell you when updates are available.</li>"
+                 "</ul>");
+        }
+
+        QString postamble;
+        postamble = QCoreApplication::translate
+            ("NetworkPermissionTester",
+             "<p><b>No personal information will be sent, no tracking is carried out, and no individual information will be shared with anyone else.</b> We will however make aggregate counts of distinct requests for usage reporting.</p>"
+             "<p>We recommend that you allow this, because it makes Sonic Visualiser more useful to you and supports the public funding of this work. But if you do not wish to allow it, please un-check the box below.<br></p>");
+        
+        QLabel *label = new QLabel;
+        label->setWordWrap(true);
+        label->setText(preamble + bullets + postamble);
+        layout->addWidget(label, 0, 0);
+
+        QCheckBox *cb = new QCheckBox(QCoreApplication::translate("NetworkPermissionTester", "Allow this"));
+        cb->setChecked(true);
+        layout->addWidget(cb, 1, 0);
+        
+        QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok);
+        QObject::connect(bb, SIGNAL(accepted()), &d, SLOT(accept()));
+        layout->addWidget(bb, 2, 0);
+        
+        d.exec();
 
         permish = cb->isChecked();
-	settings.setValue(tag, permish);
+        settings.setValue(tag, permish);
+
+        SVDEBUG << "NetworkPermissionTester: asked, answer was " << permish << endl;
     }
 
     settings.endGroup();
--- a/main/NetworkPermissionTester.h	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/NetworkPermissionTester.h	Mon Sep 17 14:05:41 2018 +0100
@@ -18,8 +18,11 @@
 class NetworkPermissionTester
 {
 public:
-    NetworkPermissionTester() { }
+    NetworkPermissionTester(bool withOSCSupport) : m_withOSC(withOSCSupport) { }
     bool havePermission();
+
+private:
+    bool m_withOSC;
 };
 
 #endif
--- a/main/OSCHandler.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/OSCHandler.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -26,7 +26,8 @@
 #include "framework/Document.h"
 #include "data/fileio/WavFileWriter.h"
 #include "transform/TransformFactory.h"
-#include "widgets/Fader.h"
+#include "widgets/LevelPanWidget.h"
+#include "widgets/LevelPanToolButton.h"
 #include "widgets/AudioDial.h"
 
 #include <bqaudioio/SystemPlaybackTarget.h>
@@ -36,8 +37,8 @@
 void
 MainWindow::handleOSCMessage(const OSCMessage &message)
 {
-    SVDEBUG << "MainWindow::handleOSCMessage: thread id = " 
-              << QThread::currentThreadId() << endl;
+    SVDEBUG << "OSCHandler: method = \""
+            << message.getMethod() << "\"" << endl;
 
     // This large function should really be abstracted out.
 
@@ -47,7 +48,7 @@
             message.getArg(0).canConvert(QVariant::String)) {
             QString path = message.getArg(0).toString();
             if (open(path, ReplaceMainModel) != FileOpenSucceeded) {
-                cerr << "MainWindow::handleOSCMessage: File open failed for path \""
+                cerr << "OSCHandler: File open failed for path \""
                           << path << "\"" << endl;
             }
             //!!! we really need to spin here and not return until the
@@ -60,7 +61,7 @@
             message.getArg(0).canConvert(QVariant::String)) {
             QString path = message.getArg(0).toString();
             if (open(path, CreateAdditionalModel) != FileOpenSucceeded) {
-                cerr << "MainWindow::handleOSCMessage: File open failed for path \""
+                cerr << "OSCHandler: File open failed for path \""
                           << path << "\"" << endl;
             }
         }
@@ -77,7 +78,7 @@
         std::vector<QString> recent = m_recentFiles.getRecent();
         if (n >= 0 && n < int(recent.size())) {
             if (open(recent[n], ReplaceMainModel) != FileOpenSucceeded) {
-                cerr << "MainWindow::handleOSCMessage: File open failed for path \""
+                cerr << "OSCHandler: File open failed for path \""
                           << recent[n] << "\"" << endl;
             }
         }
@@ -89,7 +90,7 @@
             message.getArg(0).canConvert(QVariant::String)) {
             path = message.getArg(0).toString();
             if (QFileInfo(path).exists()) {
-                SVDEBUG << "MainWindow::handleOSCMessage: Refusing to overwrite existing file in save" << endl;
+                SVDEBUG << "OSCHandler: Refusing to overwrite existing file in save" << endl;
             } else {
                 saveSessionFile(path);
             }
@@ -103,7 +104,7 @@
                 message.getArg(0).canConvert(QVariant::String)) {
                 path = message.getArg(0).toString();
                 if (QFileInfo(path).exists()) {
-                    SVDEBUG << "MainWindow::handleOSCMessage: Refusing to overwrite existing file in export" << endl;
+                    SVDEBUG << "OSCHandler: Refusing to overwrite existing file in export" << endl;
                 } else {
                     WavFileWriter writer(path,
                                          getMainModel()->getSampleRate(),
@@ -164,10 +165,21 @@
                 }
             }
 
+            SVDEBUG << "OSCHandler: Setting playback frame to " << frame << endl;
+
             m_viewManager->setPlaybackFrame(frame);
 
-            if (play && !m_playSource->isPlaying()) {
-                m_playSource->play(frame);
+            if (play) {
+                if (!m_playSource->isPlaying()) {
+                    SVDEBUG << "OSCHandler: Play source is not yet playing, calling play()" << endl;
+                    // handles audio device suspend/resume etc, as
+                    // well as calling m_playSource->play(frame)
+                    MainWindow::play();
+                } else {
+                    SVDEBUG << "OSCHandler: Play source is already playing, not starting it" << endl;
+                }
+            } else {
+                SVDEBUG << "OSCHandler: Jump only requested, not starting playback" << endl;
             }
         }
 
@@ -201,7 +213,13 @@
 
     } else if (message.getMethod() == "stop") {
             
-        if (m_playSource->isPlaying()) m_playSource->stop();
+            if (m_playSource->isPlaying()) {
+                // As with play, we want to use the MainWindow
+                // function rather than call m_playSource directly
+                // because that way the audio driver suspend/resume
+                // etc is handled properly
+                MainWindow::stop();
+            }
 
     } else if (message.getMethod() == "loop") {
 
@@ -295,7 +313,7 @@
                     channel = message.getArg(0).toInt();
                     if (channel < -1 ||
                         channel > int(getMainModel()->getChannelCount())) {
-                        cerr << "WARNING: MainWindow::handleOSCMessage: channel "
+                        cerr << "WARNING: OSCHandler: channel "
                                   << channel << " out of range" << endl;
                         channel = -1;
                     }
@@ -307,7 +325,7 @@
                     LayerFactory::getInstance()->getLayerTypeForName(str);
 
                 if (type == LayerFactory::UnknownLayer) {
-                    cerr << "WARNING: MainWindow::handleOSCMessage: unknown layer "
+                    cerr << "WARNING: OSCHandler: unknown layer "
                               << "type " << str << endl;
                 } else {
 
@@ -342,10 +360,37 @@
 
             if (property == "gain") {
                 if (value < 0.0) value = 0.0;
-                m_fader->setValue(value);
+                m_mainLevelPan->setLevel(value);
                 if (m_playTarget) m_playTarget->setOutputGain(value);
+            } else if (property == "speed") {
+                m_playSpeed->setMappedValue(value);
             } else if (property == "speedup") {
-                m_playSpeed->setMappedValue(value);
+                
+                // The speedup method existed before the speed method
+                // and is a bit weirder.
+                //
+                // For speed(x), x is a percentage of normal speed, so
+                // x=100 means play at the normal speed, x=50 means
+                // half speed, x=200 double speed etc.
+                //
+                // For speedup(x), x was some sort of modifier of
+                // percentage thing, so x=0 meant play at the normal
+                // speed, x=50 meant play at 150% of normal speed,
+                // x=100 meant play at double speed, and x=-100 rather
+                // bizarrely meant play at half speed. We handle this
+                // now by converting to speed percentage as follows:
+                
+                double percentage = 100.0;
+                if (value > 0.f) {
+                    percentage = percentage + value;
+                } else {
+                    percentage = 10000.0 / (percentage - value);
+                }
+                SVDEBUG << "OSCHandler: converted speedup(" << value
+                        << ") into speed(" << percentage << ")" << endl;
+                    
+                m_playSpeed->setMappedValue(percentage);
+                
             } else if (property == "overlays") {
                 if (value < 0.5) {
                     m_viewManager->setOverlayMode(ViewManager::NoOverlays);
@@ -430,7 +475,7 @@
 
             } else {
                 
-                cerr << "WARNING: MainWindow::handleOSCMessage: Unknown delete target " << target << endl;
+                cerr << "WARNING: OSCHandler: Unknown delete target " << target << endl;
             }
         }
 
@@ -531,9 +576,9 @@
 
             TransformId transformId = message.getArg(0).toString();
 
-	    Transform transform = TransformFactory::getInstance()->
+            Transform transform = TransformFactory::getInstance()->
                 getDefaultTransformFor(transformId);
-	    
+            
             Layer *newLayer = m_document->createDerivedLayer
                 (transform, getMainModel());
 
@@ -545,9 +590,8 @@
         }
 
     } else {
-        cerr << "WARNING: MainWindow::handleOSCMessage: Unknown or unsupported "
+        cerr << "WARNING: OSCHandler: Unknown or unsupported "
                   << "method \"" << message.getMethod()
                   << "\"" << endl;
     }
-            
 }
--- a/main/PreferencesDialog.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/PreferencesDialog.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -29,7 +29,6 @@
 #include <QTabWidget>
 #include <QLineEdit>
 #include <QFileDialog>
-#include <QMessageBox>
 #include <QSpinBox>
 #include <QListWidget>
 #include <QSettings>
@@ -38,13 +37,18 @@
 
 #include "widgets/WindowTypeSelector.h"
 #include "widgets/IconLoader.h"
+#include "widgets/ColourMapComboBox.h"
+#include "widgets/ColourComboBox.h"
+#include "widgets/PluginPathConfigurator.h"
+#include "widgets/WidgetScale.h"
 #include "base/Preferences.h"
 #include "base/ResourceFinder.h"
 #include "layer/ColourMapper.h"
+#include "layer/ColourDatabase.h"
 
 #include "bqaudioio/AudioFactory.h"
 
-#include "version.h"
+#include "../version.h"
 
 using namespace std;
 
@@ -53,6 +57,8 @@
     m_audioImplementation(0),
     m_audioPlaybackDevice(0),
     m_audioRecordDevice(0),
+    m_audioDeviceChanged(false),
+    m_coloursChanged(false),
     m_changesOnRestart(false)
 {
     setWindowTitle(tr("Sonic Visualiser: Application Preferences"));
@@ -143,24 +149,42 @@
                                            int(ColourMapper::Sunset)).toInt());
     m_colour3DColour = (settings.value("colour-3d-plot-colour",
                                        int(ColourMapper::Green)).toInt());
+    m_overviewColour = ColourDatabase::getInstance()->getColour(tr("Green"));
+    if (settings.contains("overview-colour")) {
+        QString qcolorName =
+            settings.value("overview-colour", m_overviewColour.name())
+            .toString();
+        m_overviewColour.setNamedColor(qcolorName);
+        SVCERR << "loaded colour " << m_overviewColour.name() << " from settings" << endl;
+    }
     settings.endGroup();
-    QComboBox *spectrogramGColour = new QComboBox;
-    QComboBox *spectrogramMColour = new QComboBox;
-    QComboBox *colour3DColour = new QComboBox;
-    for (i = 0; i < ColourMapper::getColourMapCount(); ++i) {
-        spectrogramGColour->addItem(ColourMapper::getColourMapName(i));
-        spectrogramMColour->addItem(ColourMapper::getColourMapName(i));
-        colour3DColour->addItem(ColourMapper::getColourMapName(i));
-        if (i == m_spectrogramGColour) spectrogramGColour->setCurrentIndex(i);
-        if (i == m_spectrogramMColour) spectrogramMColour->setCurrentIndex(i);
-        if (i == m_colour3DColour) colour3DColour->setCurrentIndex(i);
+
+    ColourMapComboBox *spectrogramGColour = new ColourMapComboBox(true);
+    spectrogramGColour->setCurrentIndex(m_spectrogramGColour);
+
+    ColourMapComboBox *spectrogramMColour = new ColourMapComboBox(true);
+    spectrogramMColour->setCurrentIndex(m_spectrogramMColour);
+
+    ColourMapComboBox *colour3DColour = new ColourMapComboBox(true);
+    colour3DColour->setCurrentIndex(m_colour3DColour);
+
+    // can't have "add new colour", as it gets saved in the session not in prefs
+    ColourComboBox *overviewColour = new ColourComboBox(false);
+    int overviewColourIndex =
+        ColourDatabase::getInstance()->getColourIndex(m_overviewColour);
+    SVCERR << "index = " << overviewColourIndex << " for colour " << m_overviewColour.name() << endl;
+    if (overviewColourIndex >= 0) {
+        overviewColour->setCurrentIndex(overviewColourIndex);
     }
-    connect(spectrogramGColour, SIGNAL(currentIndexChanged(int)),
+
+    connect(spectrogramGColour, SIGNAL(colourMapChanged(int)),
             this, SLOT(spectrogramGColourChanged(int)));
-    connect(spectrogramMColour, SIGNAL(currentIndexChanged(int)),
+    connect(spectrogramMColour, SIGNAL(colourMapChanged(int)),
             this, SLOT(spectrogramMColourChanged(int)));
-    connect(colour3DColour, SIGNAL(currentIndexChanged(int)),
+    connect(colour3DColour, SIGNAL(colourMapChanged(int)),
             this, SLOT(colour3DColourChanged(int)));
+    connect(overviewColour, SIGNAL(colourChanged(int)),
+            this, SLOT(overviewColourChanged(int)));
 
     m_tuningFrequency = prefs->getTuningFrequency();
 
@@ -202,24 +226,33 @@
     connect(m_audioRecordDeviceCombo, SIGNAL(currentIndexChanged(int)),
             this, SLOT(audioRecordDeviceChanged(int)));
 
-    vector<string> names = breakfastquay::AudioFactory::getImplementationNames();
+    vector<string> implementationNames =
+        breakfastquay::AudioFactory::getImplementationNames();
+
     QString implementationName = settings.value("audio-target", "").toString();
     if (implementationName == "auto") implementationName = "";
+    if (implementationName == "" && implementationNames.size() == 1) {
+        // We won't be showing the implementations menu in this case
+        implementationName = implementationNames[0].c_str();
+    }
+
     audioImplementation->addItem(tr("(auto)"));
     m_audioImplementation = 0;
-    for (int i = 0; in_range_for(names, i); ++i) {
+
+    for (int i = 0; in_range_for(implementationNames, i); ++i) {
         audioImplementation->addItem
-            (breakfastquay::AudioFactory::getImplementationDescription(names[i]).
-             c_str());
-        if (implementationName.toStdString() == names[i]) {
+            (breakfastquay::AudioFactory::getImplementationDescription
+             (implementationNames[i]).c_str());
+        if (implementationName.toStdString() == implementationNames[i]) {
             audioImplementation->setCurrentIndex(i+1);
             m_audioImplementation = i+1;
         }
     }
+    
     settings.endGroup();
 
     rebuildDeviceCombos();
-    m_changesOnRestart = false; // the rebuild will have changed this
+    m_audioDeviceChanged = false; // the rebuild will have changed this
 
     QCheckBox *resampleOnLoad = new QCheckBox;
     m_resampleOnLoad = prefs->getResampleOnLoad();
@@ -244,7 +277,7 @@
     tempDirButton->setIcon(IconLoader().load("fileopen"));
     connect(tempDirButton, SIGNAL(clicked()),
             this, SLOT(tempDirButtonClicked()));
-    tempDirButton->setFixedSize(QSize(24, 24));
+    tempDirButton->setFixedSize(WidgetScale::scaleQSize(QSize(24, 24)));
 
     QCheckBox *showSplash = new QCheckBox;
     m_showSplash = prefs->getShowSplash();
@@ -296,7 +329,7 @@
         QString f0 = f;
         f.replace("sonic-visualiser_", "").replace(".qm", "");
         if (f == f0) { // our expectations about filename format were not met
-            cerr << "INFO: Unexpected filename " << f << " in i18n resource directory" << endl;
+            SVCERR << "INFO: Unexpected filename " << f << " in i18n resource directory" << endl;
         } else {
             m_locales.push_back(f);
             QString displayText;
@@ -352,55 +385,11 @@
     hms->setCheckState(m_showHMS ? Qt::Checked : Qt::Unchecked);
     connect(hms, SIGNAL(stateChanged(int)),
             this, SLOT(showHMSChanged(int)));
-    
-    // General tab
 
-    QFrame *frame = new QFrame;
-    
-    QGridLayout *subgrid = new QGridLayout;
-    frame->setLayout(subgrid);
-
+    QFrame *frame = 0;
+    QGridLayout *subgrid = 0;
     int row = 0;
 
-    subgrid->addWidget(new QLabel(tr("%1:").arg(tr("User interface language"))),
-                       row, 0);
-    subgrid->addWidget(locale, row++, 1, 1, 1);
-
-    subgrid->addWidget(new QLabel(tr("%1:").arg(tr("Allow network usage"))),
-                       row, 0);
-    subgrid->addWidget(networkPermish, row++, 1, 1, 1);
-
-    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
-                                                ("Temporary Directory Root"))),
-                       row, 0);
-    subgrid->addWidget(m_tempDirRootEdit, row, 1, 1, 1);
-    subgrid->addWidget(tempDirButton, row, 2, 1, 1);
-    row++;
-
-    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
-                                                ("Resample On Load"))),
-                       row, 0);
-    subgrid->addWidget(resampleOnLoad, row++, 1, 1, 1);
-
-    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
-                                                ("Use Gapless Mode"))),
-                       row, 0);
-    subgrid->addWidget(gaplessMode, row++, 1, 1, 1);
-
-    subgrid->addWidget(new QLabel(tr("Audio service:")), row, 0);
-    subgrid->addWidget(audioImplementation, row++, 1, 1, 2);
-
-    subgrid->addWidget(new QLabel(tr("Audio playback device:")), row, 0);
-    subgrid->addWidget(m_audioPlaybackDeviceCombo, row++, 1, 1, 2);
-
-    subgrid->addWidget(new QLabel(tr("Audio record device:")), row, 0);
-    subgrid->addWidget(m_audioRecordDeviceCombo, row++, 1, 1, 2);
-
-    subgrid->setRowStretch(row, 10);
-    
-    m_tabOrdering[GeneralTab] = m_tabs->count();
-    m_tabs->addTab(frame, tr("&General"));
-
     // Appearance tab
 
     frame = new QFrame;
@@ -408,11 +397,6 @@
     frame->setLayout(subgrid);
     row = 0;
 
-    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
-                                                ("Show Splash Screen"))),
-                       row, 0);
-    subgrid->addWidget(showSplash, row++, 1, 1, 1);
-
 #ifdef Q_OS_MAC
     if (devicePixelRatio() > 1) {
         subgrid->addWidget(new QLabel(tr("Draw layers at Retina resolution:")), row, 0);
@@ -437,6 +421,10 @@
                        row, 0);
     subgrid->addWidget(colour3DColour, row++, 1, 1, 2);
 
+    subgrid->addWidget(new QLabel(tr("Overview waveform colour:")),
+                       row, 0);
+    subgrid->addWidget(overviewColour, row++, 1, 1, 2);
+
 #ifdef NOT_DEFINED // see earlier
     subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
                                                 ("Background Mode"))),
@@ -515,13 +503,17 @@
     frame->setLayout(subgrid);
     row = 0;
     
-    subgrid->addWidget(new QLabel(tr("Default session template for audio files:")), row++, 0);
+    subgrid->addWidget(new QLabel(tr("Default session template when loading audio files:")), row++, 0);
 
     QListWidget *lw = new QListWidget();
     subgrid->addWidget(lw, row, 0);
     subgrid->setRowStretch(row, 10);
     row++;
 
+    subgrid->addWidget(new QLabel(tr("(Use \"%1\" in the File menu to add to these.)")
+                                  .arg(tr("Export Session as Template..."))),
+                       row++, 0);
+
     settings.beginGroup("MainWindow");
     m_currentTemplate = settings.value("sessiontemplate", "").toString();
     settings.endGroup();
@@ -553,6 +545,81 @@
     m_tabOrdering[TemplateTab] = m_tabs->count();
     m_tabs->addTab(frame, tr("Session &Template"));
 
+    // Audio IO tab
+
+    frame = new QFrame;
+    subgrid = new QGridLayout;
+    frame->setLayout(subgrid);
+    row = 0;
+
+    if (implementationNames.size() > 1) {
+        subgrid->addWidget(new QLabel(tr("Audio service:")), row, 0);
+        subgrid->addWidget(audioImplementation, row++, 1, 1, 2);
+    }
+
+    subgrid->addWidget(new QLabel(tr("Audio playback device:")), row, 0);
+    subgrid->addWidget(m_audioPlaybackDeviceCombo, row++, 1, 1, 2);
+
+    subgrid->addWidget(new QLabel(tr("Audio record device:")), row, 0);
+    subgrid->addWidget(m_audioRecordDeviceCombo, row++, 1, 1, 2);
+
+    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
+                                                ("Use Gapless Mode"))),
+                       row, 0);
+    subgrid->addWidget(gaplessMode, row++, 1, 1, 1);
+
+    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
+                                                ("Resample On Load"))),
+                       row, 0);
+    subgrid->addWidget(resampleOnLoad, row++, 1, 1, 1);
+
+    subgrid->setRowStretch(row, 10);
+    
+    m_tabOrdering[AudioIOTab] = m_tabs->count();
+    m_tabs->addTab(frame, tr("A&udio I/O"));
+
+    // Plugins tab
+
+    m_pluginPathConfigurator = new PluginPathConfigurator(this);
+    m_pluginPathConfigurator->setPaths(PluginPathSetter::getPaths());
+    connect(m_pluginPathConfigurator, SIGNAL(pathsChanged()),
+            this, SLOT(pluginPathsChanged()));
+    
+    m_tabOrdering[PluginTab] = m_tabs->count();
+    m_tabs->addTab(m_pluginPathConfigurator, tr("&Plugins"));
+    
+    // General tab
+
+    frame = new QFrame;
+    subgrid = new QGridLayout;
+    frame->setLayout(subgrid);
+    row = 0;
+
+    subgrid->addWidget(new QLabel(tr("%1:").arg(tr("User interface language"))),
+                       row, 0);
+    subgrid->addWidget(locale, row++, 1, 1, 1);
+
+    subgrid->addWidget(new QLabel(tr("%1:").arg(tr("Allow network usage"))),
+                       row, 0);
+    subgrid->addWidget(networkPermish, row++, 1, 1, 1);
+
+    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
+                                                ("Show Splash Screen"))),
+                       row, 0);
+    subgrid->addWidget(showSplash, row++, 1, 1, 1);
+
+    subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
+                                                ("Temporary Directory Root"))),
+                       row, 0);
+    subgrid->addWidget(m_tempDirRootEdit, row, 1, 1, 1);
+    subgrid->addWidget(tempDirButton, row, 2, 1, 1);
+    row++;
+    
+    subgrid->setRowStretch(row, 10);
+    
+    m_tabOrdering[GeneralTab] = m_tabs->count();
+    m_tabs->addTab(frame, tr("&Other"));
+
     QDialogButtonBox *bb = new QDialogButtonBox(Qt::Horizontal);
     grid->addWidget(bb, 1, 0);
     
@@ -581,13 +648,11 @@
 
     vector<string> names = breakfastquay::AudioFactory::getImplementationNames();
     string implementationName;
+    
     if (in_range_for(names, m_audioImplementation-1)) {
         implementationName = names[m_audioImplementation-1];
     }
 
-    m_audioPlaybackDeviceCombo->clear();
-    m_audioRecordDeviceCombo->clear();
-
     QString suffix;
     if (implementationName != "") {
         suffix = "-" + QString(implementationName.c_str());
@@ -596,6 +661,7 @@
     names = breakfastquay::AudioFactory::getPlaybackDeviceNames(implementationName);
     QString playbackDeviceName = settings.value
         ("audio-playback-device" + suffix, "").toString();
+    m_audioPlaybackDeviceCombo->clear();
     m_audioPlaybackDeviceCombo->addItem(tr("(auto)"));
     m_audioPlaybackDeviceCombo->setCurrentIndex(0);
     m_audioPlaybackDevice = 0;
@@ -610,6 +676,7 @@
     names = breakfastquay::AudioFactory::getRecordDeviceNames(implementationName);
     QString recordDeviceName = settings.value
         ("audio-record-device" + suffix, "").toString();
+    m_audioRecordDeviceCombo->clear();
     m_audioRecordDeviceCombo->addItem(tr("(auto)"));
     m_audioRecordDeviceCombo->setCurrentIndex(0);
     m_audioRecordDevice = 0;
@@ -657,6 +724,7 @@
 PreferencesDialog::spectrogramGColourChanged(int colour)
 {
     m_spectrogramGColour = colour;
+    m_coloursChanged = true;
     m_applyButton->setEnabled(true);
 }
 
@@ -664,6 +732,7 @@
 PreferencesDialog::spectrogramMColourChanged(int colour)
 {
     m_spectrogramMColour = colour;
+    m_coloursChanged = true;
     m_applyButton->setEnabled(true);
 }
 
@@ -671,6 +740,15 @@
 PreferencesDialog::colour3DColourChanged(int colour)
 {
     m_colour3DColour = colour;
+    m_coloursChanged = true;
+    m_applyButton->setEnabled(true);
+}
+
+void
+PreferencesDialog::overviewColourChanged(int colour)
+{
+    m_overviewColour = ColourDatabase::getInstance()->getColour(colour);
+    m_coloursChanged = true;
     m_applyButton->setEnabled(true);
 }
 
@@ -695,7 +773,7 @@
         m_audioImplementation = s;
         rebuildDeviceCombos();
         m_applyButton->setEnabled(true);
-        m_changesOnRestart = true;
+        m_audioDeviceChanged = true;
     }
 }
 
@@ -705,7 +783,7 @@
     if (m_audioPlaybackDevice != s) {
         m_audioPlaybackDevice = s;
         m_applyButton->setEnabled(true);
-        m_changesOnRestart = true;
+        m_audioDeviceChanged = true;
     }
 }
 
@@ -715,7 +793,7 @@
     if (m_audioRecordDevice != s) {
         m_audioRecordDevice = s;
         m_applyButton->setEnabled(true);
-        m_changesOnRestart = true;
+        m_audioDeviceChanged = true;
     }
 }
 
@@ -837,6 +915,13 @@
 }
 
 void
+PreferencesDialog::pluginPathsChanged()
+{
+    m_applyButton->setEnabled(true);
+    m_changesOnRestart = true;
+}
+
+void
 PreferencesDialog::okClicked()
 {
     applyClicked();
@@ -874,6 +959,9 @@
 
     vector<string> names = breakfastquay::AudioFactory::getImplementationNames();
     string implementationName;
+    if (m_audioImplementation > int(names.size())) {
+        m_audioImplementation = 0;
+    }
     if (m_audioImplementation > 0) {
         implementationName = names[m_audioImplementation-1];
     }
@@ -886,6 +974,9 @@
     
     names = breakfastquay::AudioFactory::getPlaybackDeviceNames(implementationName);
     string deviceName;
+    if (m_audioPlaybackDevice > int(names.size())) {
+        m_audioPlaybackDevice = 0;
+    }
     if (m_audioPlaybackDevice > 0) {
         deviceName = names[m_audioPlaybackDevice-1];
     }
@@ -893,6 +984,9 @@
 
     names = breakfastquay::AudioFactory::getRecordDeviceNames(implementationName);
     deviceName = "";
+    if (m_audioRecordDevice > int(names.size())) {
+        m_audioRecordDevice = 0;
+    }
     if (m_audioRecordDevice > 0) {
         deviceName = names[m_audioRecordDevice-1];
     }
@@ -905,6 +999,7 @@
     settings.setValue("spectrogram-colour", m_spectrogramGColour);
     settings.setValue("spectrogram-melodic-colour", m_spectrogramMColour);
     settings.setValue("colour-3d-plot-colour", m_colour3DColour);
+    settings.setValue("overview-colour", m_overviewColour.name());
     settings.endGroup();
 
     settings.beginGroup("MainWindow");
@@ -918,6 +1013,18 @@
                                  tr("<b>Restart required</b><p>One or more of the application preferences you have changed may not take full effect until Sonic Visualiser is restarted.</p><p>Please exit and restart the application now if you want these changes to take effect immediately.</p>"));
         m_changesOnRestart = false;
     }
+
+    if (m_audioDeviceChanged) {
+        emit audioDeviceChanged();
+        m_audioDeviceChanged = false;
+    }
+
+    if (m_coloursChanged) {
+        emit coloursChanged();
+        m_coloursChanged = false;
+    }
+
+    PluginPathSetter::savePathSettings(m_pluginPathConfigurator->getPaths());
 }    
 
 void
--- a/main/PreferencesDialog.h	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/PreferencesDialog.h	Mon Sep 17 14:05:41 2018 +0100
@@ -13,11 +13,12 @@
     COPYING included with this distribution for more information.
 */
 
-#ifndef _PREFERENCES_DIALOG_H_
-#define _PREFERENCES_DIALOG_H_
+#ifndef SV_PREFERENCES_DIALOG_H
+#define SV_PREFERENCES_DIALOG_H
 
 #include <QDialog>
 #include <QMap>
+#include <QColor>
 
 #include "base/Window.h"
 
@@ -26,6 +27,7 @@
 class QLineEdit;
 class QTabWidget;
 class QComboBox;
+class PluginPathConfigurator;
 
 class PreferencesDialog : public QDialog
 {
@@ -37,12 +39,18 @@
 
     enum Tab {
         GeneralTab,
+        AudioIOTab,
         AppearanceTab,
         AnalysisTab,
-        TemplateTab
+        TemplateTab,
+        PluginTab
     };
     void switchToTab(Tab tab);
 
+signals:
+    void audioDeviceChanged();
+    void coloursChanged();
+                             
 public slots:
     void applicationClosing(bool quickly);
 
@@ -53,6 +61,7 @@
     void spectrogramGColourChanged(int state);
     void spectrogramMColourChanged(int state);
     void colour3DColourChanged(int state);
+    void overviewColourChanged(int state);
     void propertyLayoutChanged(int layout);
     void tuningFrequencyChanged(double freq);
     void audioImplementationChanged(int impl);
@@ -72,6 +81,7 @@
     void localeChanged(int);
     void networkPermissionChanged(int state);
     void retinaChanged(int state);
+    void pluginPathsChanged();
 
     void tempDirButtonClicked();
 
@@ -91,6 +101,8 @@
     QComboBox *m_audioPlaybackDeviceCombo;
     QComboBox *m_audioRecordDeviceCombo;
     void rebuildDeviceCombos();
+
+    PluginPathConfigurator *m_pluginPathConfigurator;
     
     QString m_currentTemplate;
     QStringList m_templates;
@@ -104,6 +116,7 @@
     int m_spectrogramGColour;
     int m_spectrogramMColour;
     int m_colour3DColour;
+    QColor m_overviewColour;
     int m_propertyLayout;
     double m_tuningFrequency;
     int m_audioImplementation;
@@ -122,6 +135,8 @@
     int m_viewFontSize;
     bool m_showSplash;
 
+    bool m_audioDeviceChanged;
+    bool m_coloursChanged;
     bool m_changesOnRestart;
 };
 
--- a/main/SVSplash.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/SVSplash.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -42,37 +42,37 @@
 
     if (widthMultiple > 2.5 || dpratio > 1.0) {
 
-	// Hi-dpi either via pixel doubling or simply via lots of
-	// pixels
+        // Hi-dpi either via pixel doubling or simply via lots of
+        // pixels
 
-	double factor = widthMultiple / 2.5;
-	if (factor < 1.0) factor = 1.0;
-	sw = int(floor(w * factor));
-	sh = int(floor(h * factor));
+        double factor = widthMultiple / 2.5;
+        if (factor < 1.0) factor = 1.0;
+        sw = int(floor(w * factor));
+        sh = int(floor(h * factor));
 
-	delete p1;
-	m_pixmap = new QPixmap(int(floor(sw * dpratio)),
-			       int(floor(sh * dpratio)));
+        delete p1;
+        m_pixmap = new QPixmap(int(floor(sw * dpratio)),
+                               int(floor(sh * dpratio)));
 
-//	cerr << "pixmap size = " << m_pixmap->width() << " * "
-//	     << m_pixmap->height() << endl;
-	
-	m_pixmap->fill(Qt::red);
-	QSvgRenderer renderer(QString(":icons/scalable/sv-splash.svg"));
-	QPainter painter(m_pixmap);
-	renderer.render(&painter);
-	painter.end();
+//        cerr << "pixmap size = " << m_pixmap->width() << " * "
+//             << m_pixmap->height() << endl;
+        
+        m_pixmap->fill(Qt::red);
+        QSvgRenderer renderer(QString(":icons/scalable/sv-splash.svg"));
+        QPainter painter(m_pixmap);
+        renderer.render(&painter);
+        painter.end();
 
     } else {
-	// The "low dpi" case
-	m_pixmap = p1;
+        // The "low dpi" case
+        m_pixmap = p1;
     }
     
     setFixedWidth(sw);
     setFixedHeight(sh);
     setGeometry(desk.x() + desk.width()/2 - sw/2,
-		desk.y() + desk.height()/2 - sh/2,
-		sw, sh);
+                desk.y() + desk.height()/2 - sh/2,
+                sw, sh);
 }
 
 SVSplash::~SVSplash()
@@ -92,9 +92,9 @@
     painter->drawPixmap(rect(), *m_pixmap, m_pixmap->rect());
     QString text = QString("v%1").arg(SV_VERSION);
     painter->drawText
-	(width() - painter->fontMetrics().width(text) - (width()/50),
-	 (width()/70) + painter->fontMetrics().ascent(),
-	 text);
+        (width() - painter->fontMetrics().width(text) - (width()/50),
+         (width()/70) + painter->fontMetrics().ascent(),
+         text);
 }
 
 
--- a/main/Surveyer.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/Surveyer.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -24,7 +24,7 @@
 #include <QPushButton>
 #include <QUrl>
 
-#include "version.h"
+#include "../version.h"
 
 #include "transform/TransformFactory.h"
 #include "plugin/PluginIdentifier.h"
--- a/main/main.cpp	Mon Sep 17 13:53:25 2018 +0100
+++ b/main/main.cpp	Mon Sep 17 14:05:41 2018 +0100
@@ -24,9 +24,10 @@
 #include "data/fileio/FileSource.h"
 #include "widgets/TipDialog.h"
 #include "widgets/InteractiveFileFinder.h"
-#include "svapp/framework/TransformUserConfigurator.h"
+#include "framework/TransformUserConfigurator.h"
 #include "transform/TransformFactory.h"
-#include "svcore/plugin/PluginScan.h"
+#include "plugin/PluginScan.h"
+#include "plugin/PluginPathSetter.h"
 
 #include <QMetaType>
 #include <QApplication>
@@ -279,7 +280,6 @@
     settings.beginGroup("Preferences");
     // Default to using Piper server; can change in preferences
     if (!settings.contains("run-vamp-plugins-in-process")) {
-        cerr << "setting does not exist yet" << endl;
         settings.setValue("run-vamp-plugins-in-process", false);
     }
     settings.endGroup();
@@ -301,6 +301,8 @@
     }
     settings.endGroup();
 
+    PluginPathSetter::initialiseEnvironmentVariables();
+    
     QIcon icon;
     int sizes[] = { 16, 22, 24, 32, 48, 64, 128 };
     for (int i = 0; i < int(sizeof(sizes)/sizeof(sizes[0])); ++i) {
@@ -309,9 +311,11 @@
     QApplication::setWindowIcon(icon);
 
     QString language = QLocale::system().name();
+    SVDEBUG << "System language is: " << language << endl;
 
     settings.beginGroup("Preferences");
-    language = settings.value("locale", language).toString();
+    QString prefLanguage = settings.value("locale", language).toString();
+    if (prefLanguage != QString()) language = prefLanguage;
     settings.endGroup();
 
     QTranslator qtTranslator;
--- a/noconfig.pri	Mon Sep 17 13:53:25 2018 +0100
+++ b/noconfig.pri	Mon Sep 17 14:05:41 2018 +0100
@@ -1,11 +1,13 @@
+
+CONFIG += c++14
 
 CONFIG += release
-
-#CONFIG -= release
 #CONFIG += debug
 
+PREFIX_PATH = /usr/local
+
 DEFINES += NDEBUG BUILD_RELEASE
-DEFINES += NO_TIMING
+DEFINES += NO_TIMING NO_HIT_COUNTS
 
 DEFINES += HAVE_PIPER HAVE_PLUGIN_CHECKER_HELPER
 
@@ -28,6 +30,7 @@
 # these.
 
 LIBS += \
+        -lbase \
         -lbz2 \
 	-lrubberband \
 	-lfftw3 \
@@ -54,11 +57,11 @@
 
     # This config is currently used for 32-bit Windows builds.
 
-    INCLUDEPATH += sv-dependency-builds/win32-mingw/include
+    INCLUDEPATH += $$PWD/sv-dependency-builds/win32-mingw/include
 
-    LIBS += -Lrelease -Lsv-dependency-builds/win32-mingw/lib -L../sonic-visualiser/sv-dependency-builds/win32-mingw/lib
+    LIBS += -Lrelease -L$$PWD/sv-dependency-builds/win32-mingw/lib
 
-    DEFINES += NOMINMAX _USE_MATH_DEFINES USE_OWN_ALIGNED_MALLOC CAPNP_LITE
+    DEFINES += NOMINMAX _USE_MATH_DEFINES CAPNP_LITE
 
     QMAKE_CXXFLAGS_RELEASE += -ffast-math
 
@@ -76,22 +79,23 @@
     # we want to do 32-bit builds with MSVC as well, then we'll
     # need to add a way to distinguish the two.
     
-    INCLUDEPATH += sv-dependency-builds/win64-msvc/include
+    INCLUDEPATH += $$PWD/sv-dependency-builds/win64-msvc/include
 
-## This seems to be intruding even when we're supposed to be release
+    # This seems to be intruding even when we're supposed to be release
 #    CONFIG(debug) {
 #        LIBS += -NODEFAULTLIB:MSVCRT -Ldebug \
-#            -L../sonic-visualiser/sv-dependency-builds/win64-msvc/lib/debug \
-#            -L../sonic-visualiser/sv-dependency-builds/win64-msvc/lib
+#            -L$$PWD/sv-dependency-builds/win64-msvc/lib/debug \
+#            -L$$PWD/sv-dependency-builds/win64-msvc/lib
 #    }
     CONFIG(release) {
         LIBS += -Lrelease \
-            -L../sonic-visualiser/sv-dependency-builds/win64-msvc/lib
+            -L$$PWD/sv-dependency-builds/win64-msvc/lib
     }
 
-    DEFINES += NOMINMAX _USE_MATH_DEFINES USE_OWN_ALIGNED_MALLOC CAPNP_LITE
+    DEFINES += NOMINMAX _USE_MATH_DEFINES CAPNP_LITE
 
-    QMAKE_CXXFLAGS_RELEASE += -fp:fast
+    QMAKE_CXXFLAGS_RELEASE += -fp:fast -gl
+    QMAKE_LFLAGS_RELEASE += -ltcg
 
     # No Ogg/FLAC support in the sndfile build on this platform yet
     LIBS -= -lFLAC -logg -lvorbis -lvorbisenc -lvorbisfile
@@ -111,12 +115,12 @@
 
     # All Mac builds are 64-bit these days.
 
-    INCLUDEPATH += sv-dependency-builds/osx/include
-    LIBS += -Lsv-dependency-builds/osx/lib
+    INCLUDEPATH += $$PWD/sv-dependency-builds/osx/include
+    LIBS += -L$$PWD/sv-dependency-builds/osx/lib -L$$PWD
 
-    QMAKE_CXXFLAGS_RELEASE += -ffast-math
+    QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math
 
-    DEFINES += HAVE_COREAUDIO MALLOC_IS_ALIGNED HAVE_VDSP
+    DEFINES += HAVE_COREAUDIO HAVE_VDSP
     LIBS += \
         -framework CoreAudio \
 	-framework CoreMidi \
--- a/platform-dataquay.pri	Mon Sep 17 13:53:25 2018 +0100
+++ b/platform-dataquay.pri	Mon Sep 17 14:05:41 2018 +0100
@@ -3,7 +3,11 @@
     include(./config.pri)
 }
 
-CONFIG += staticlib c++11
+!exists(config.pri) {
+    include(./noconfig.pri)
+}
+
+CONFIG += staticlib
 
 DEFINES -= USE_REDLAND
 QMAKE_CXXFLAGS -= -I/usr/include/rasqal -I/usr/include/raptor2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,166 @@
+#!/bin/bash
+
+# Disable shellcheck warnings for useless-use-of-cat. UUOC is good
+# practice, not bad: clearer, safer, less error-prone.
+# shellcheck disable=SC2002
+
+sml="$REPOINT_SML"
+
+set -eu
+
+# avoid gussying up output
+export HGPLAIN=true
+
+mydir=$(dirname "$0")
+program="$mydir/repoint.sml"
+
+hasher=
+local_install=
+if [ -w "$mydir" ]; then
+    if echo | sha256sum >/dev/null 2>&1 ; then
+	hasher=sha256sum
+        local_install=true
+    elif echo | shasum >/dev/null 2>&1 ; then
+	hasher=shasum
+	local_install=true
+    else
+        echo "WARNING: sha256sum or shasum program not found" 1>&2
+    fi
+fi
+
+if [ -n "$local_install" ]; then
+    hash=$(echo "$sml" | cat "$program" - | $hasher | cut -c1-16)
+    gen_sml=$mydir/.repoint-$hash.sml
+    gen_out=$mydir/.repoint-$hash.bin
+    trap 'rm -f $gen_sml' 0
+else
+    gen_sml=$(mktemp /tmp/repoint-XXXXXXXX.sml)
+    gen_out=$(mktemp /tmp/repoint-XXXXXXXX.bin)
+    trap 'rm -f $gen_sml $gen_out' 0
+fi
+
+if [ -x "$gen_out" ]; then
+    exec "$gen_out" "$@"
+fi
+
+# We need one of Poly/ML, SML/NJ, MLton, or MLKit. Since we're running
+# a single-file SML program as if it were a script, our order of
+# preference is usually based on startup speed. An exception is the
+# local_install case, where we retain a persistent binary
+
+if [ -z "$sml" ]; then
+    if [ -n "$local_install" ] && mlton 2>&1 | grep -q 'MLton'; then
+	sml="mlton"
+    elif sml -h 2>&1 | grep -q 'Standard ML of New Jersey'; then
+	sml="smlnj"
+    # We would prefer Poly/ML to SML/NJ, except that Poly v5.7 has a
+    # nasty bug that occasionally causes it to deadlock on startup.
+    # That is fixed in v5.7.1, so we could promote it up the order
+    # again at some point in future
+    elif echo | poly -v 2>/dev/null | grep -q 'Poly/ML'; then
+	sml="polyml"
+    elif mlton 2>&1 | grep -q 'MLton'; then
+	sml="mlton"
+    # MLKit is at the bottom because it leaves compiled files around
+    # in an MLB subdir in the current directory
+    elif mlkit 2>&1 | grep -q 'MLKit'; then
+	sml="mlkit"
+    else cat 1>&2 <<EOF
+
+ERROR: No supported SML compiler or interpreter found       
+EOF
+	cat 1>&2 <<EOF
+
+  The Repoint external source code manager needs a Standard ML (SML)
+  compiler or interpreter to run.
+
+  Please ensure you have one of the following SML implementations
+  installed and present in your PATH, and try again.
+
+    1. Standard ML of New Jersey
+       - may be found in a distribution package called: smlnj
+       - executable name: sml
+
+    2. Poly/ML
+       - may be found in a distribution package called: polyml
+       - executable name: poly
+
+    3. MLton
+       - may be found in a distribution package called: mlton
+       - executable name: mlton
+
+    4. MLKit
+       - may be found in a distribution package called: mlkit
+       - executable name: mlkit
+
+EOF
+	exit 2
+    fi
+fi
+
+arglist=""
+for arg in "$@"; do
+    if [ -n "$arglist" ]; then arglist="$arglist,"; fi
+    if echo "$arg" | grep -q '["'"'"']' ; then
+	arglist="$arglist\"usage\""
+    else
+	arglist="$arglist\"$arg\""
+    fi
+done
+
+case "$sml" in
+    polyml)
+        if [ -n "$local_install" ] && polyc --help >/dev/null 2>&1 ; then
+            if [ ! -x "$gen_out" ]; then
+                polyc -o "$gen_out" "$program"
+            fi
+	    "$gen_out" "$@"
+        else
+            echo 'use "'"$program"'"; repoint ['"$arglist"'];' |
+                poly -q --error-exit
+        fi ;;
+    mlton)
+        if [ ! -x "$gen_out" ]; then
+	    echo "[Precompiling Repoint binary...]" 1>&2
+	    echo "val _ = main ()" | cat "$program" - > "$gen_sml"
+	    mlton -output "$gen_out" "$gen_sml"
+        fi
+	"$gen_out" "$@" ;;
+    mlkit)
+        if [ ! -x "$gen_out" ]; then
+	    echo "[Precompiling Repoint binary...]" 1>&2
+	    echo "val _ = main ()" | cat "$program" - > "$gen_sml"
+	    mlkit -output "$gen_out" "$gen_sml"
+        fi
+	"$gen_out" "$@" ;;
+    smlnj)
+	cat "$program" | (
+	    cat <<EOF
+val smlrun__cp = 
+    let val x = !Control.Print.out in
+        Control.Print.out := { say = fn _ => (), flush = fn () => () };
+        x
+    end;
+val smlrun__prev = ref "";
+Control.Print.out := { 
+    say = fn s => 
+        (if String.isSubstring " Error" s
+         then (Control.Print.out := smlrun__cp;
+               (#say smlrun__cp) (!smlrun__prev);
+               (#say smlrun__cp) s)
+         else (smlrun__prev := s; ())),
+    flush = fn s => ()
+};
+EOF
+	    cat -
+	    cat <<EOF
+val _ = repoint [$arglist];
+val _ = OS.Process.exit (OS.Process.success);
+EOF
+            ) > "$gen_sml"
+	CM_VERBOSE=false sml "$gen_sml" ;;
+    *)
+	echo "ERROR: Unknown SML implementation name: $sml" 1>&2;
+	exit 2 ;;
+esac
+       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint-lock.json	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,46 @@
+{
+  "libraries": {
+    "vamp-plugin-sdk": {
+      "pin": "da86fb0bccb3"
+    },
+    "svcore": {
+      "pin": "710e6250a401"
+    },
+    "svgui": {
+      "pin": "13d9b422f7fe"
+    },
+    "svapp": {
+      "pin": "9e15607531b2"
+    },
+    "checker": {
+      "pin": "2e8a5f665a07"
+    },
+    "piper": {
+      "pin": "f5a04ffe4d5a0ae01e77018a86a59b48a425e674"
+    },
+    "piper-cpp": {
+      "pin": "44cb74e186a703e7e6ce403aa295913a87b88d62"
+    },
+    "dataquay": {
+      "pin": "807b55408d9e"
+    },
+    "bqvec": {
+      "pin": "3c9de9e7f6e8"
+    },
+    "bqfft": {
+      "pin": "a766fe47501b"
+    },
+    "bqresample": {
+      "pin": "a9a5555d9b6d"
+    },
+    "bqaudioio": {
+      "pin": "138a7a8b546b"
+    },
+    "sv-dependency-builds": {
+      "pin": "f1a9b270e043"
+    },
+    "icons/scalable": {
+      "pin": "1c6516ba7fc1"
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint-project.json	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,83 @@
+{
+    "config": {
+        "extdir": "."
+    },
+    "services": {
+        "soundsoftware": {
+            "vcs": ["hg", "git"],
+            "anonymous": "https://code.soundsoftware.ac.uk/{vcs}/{repository}",
+            "authenticated": "https://{account}@code.soundsoftware.ac.uk/{vcs}/{repository}"
+        }
+    },
+    "libraries": {
+        "vamp-plugin-sdk": {
+            "vcs": "hg",
+            "service": "soundsoftware"
+        },
+        "svcore": {
+            "vcs": "hg",
+            "service": "soundsoftware",
+	    "branch": "zoom"
+        },
+        "svgui": {
+            "vcs": "hg",
+            "service": "soundsoftware",
+	    "branch": "zoom"
+        },
+        "svapp": {
+            "vcs": "hg",
+	    "service": "soundsoftware"
+        },
+        "checker": {
+            "vcs": "hg",
+            "service": "soundsoftware",
+            "repository": "vamp-plugin-load-checker"
+        },
+        "piper": {
+            "vcs": "git",
+            "service": "github",
+            "owner": "piper-audio"
+        },
+        "piper-cpp": {
+            "vcs": "git",
+            "service": "github",
+            "owner": "piper-audio",
+            "repository": "piper-vamp-cpp"
+        },
+        "dataquay": {
+            "vcs": "hg",
+            "service": "bitbucket",
+            "owner": "breakfastquay"
+        },
+        "bqvec": {
+            "vcs": "hg",
+            "service": "bitbucket",
+            "owner": "breakfastquay"
+        },
+        "bqfft": {
+            "vcs": "hg",
+            "service": "bitbucket",
+            "owner": "breakfastquay"
+        },
+        "bqresample": {
+            "vcs": "hg",
+            "service": "bitbucket",
+            "owner": "breakfastquay"
+        },
+        "bqaudioio": {
+            "vcs": "hg",
+            "service": "bitbucket",
+            "owner": "breakfastquay"
+        },
+        "sv-dependency-builds": {
+            "vcs": "hg",
+            "service": "soundsoftware"
+        },
+        "icons/scalable": {
+            "vcs": "hg",
+            "service": "soundsoftware",
+            "repository": "sv-iconset"
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint.bat	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,3 @@
+@echo off
+PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dpn0.ps1' %*";
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint.pri	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,7 @@
+
+repoint.target = $$PWD/.repoint.point
+repoint.depends = $$PWD/repoint-project.json $$PWD/repoint-lock.json
+repoint.commands = $$PWD/repoint install --directory $$PWD
+
+QMAKE_EXTRA_TARGETS += repoint
+PRE_TARGETDEPS += $$repoint.target
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint.ps1	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,117 @@
+<#
+
+.SYNOPSIS
+A simple manager for third-party source code dependencies.
+Run "repoint help" for more documentation.
+
+#>
+
+Set-StrictMode -Version 2.0
+$ErrorActionPreference = "Stop"
+$env:HGPLAIN = "true"
+
+$sml = $env:REPOINT_SML
+
+$mydir = Split-Path $MyInvocation.MyCommand.Path -Parent
+$program = "$mydir/repoint.sml"
+
+# We need either Poly/ML or SML/NJ. No great preference as to which.
+
+# Typical locations
+$env:PATH = "$env:PATH;C:\Program Files (x86)\SMLNJ\bin;C:\Program Files\Poly ML;C:\Program Files (x86)\Poly ML"
+
+if (!$sml) {
+    if (Get-Command "sml" -ErrorAction SilentlyContinue) {
+       $sml = "smlnj"
+    } elseif (Get-Command "polyml" -ErrorAction SilentlyContinue) {
+       $sml = "poly"
+    } else {
+       echo @"
+
+ERROR: No supported SML compiler or interpreter found       
+
+  The Repoint external source code manager needs a Standard ML (SML)
+  compiler or interpreter to run.
+
+  Please ensure you have one of the following SML implementations
+  installed and present in your PATH, and try again.
+
+    1. Standard ML of New Jersey
+       - executable name: sml
+
+    2. Poly/ML
+       - executable name: polyml
+
+"@
+       exit 1
+    }
+}
+
+if ($args -match "'""") {
+    $arglist = '["usage"]'
+} else {
+    $arglist = '["' + ($args -join '","') + '"]'
+}
+
+if ($sml -eq "poly") {
+
+    $program = $program -replace "\\","\\\\"
+    echo "use ""$program""; repoint $arglist" | polyml -q --error-exit | Out-Host
+
+    if (-not $?) {
+        exit $LastExitCode
+    }
+
+} elseif ($sml -eq "smlnj") {
+
+    $lines = @(Get-Content $program)
+    $lines = $lines -notmatch "val _ = main ()"
+
+    $intro = @"
+val smlrun__cp = 
+    let val x = !Control.Print.out in
+        Control.Print.out := { say = fn _ => (), flush = fn () => () };
+        x
+    end;
+val smlrun__prev = ref "";
+Control.Print.out := { 
+    say = fn s => 
+        (if String.isSubstring "Error" s orelse String.isSubstring "Fail" s
+         then (Control.Print.out := smlrun__cp;
+               (#say smlrun__cp) (!smlrun__prev);
+               (#say smlrun__cp) s)
+         else (smlrun__prev := s; ())),
+    flush = fn s => ()
+};
+"@ -split "[\r\n]+"
+
+    $outro = @"
+val _ = repoint $arglist;
+val _ = OS.Process.exit (OS.Process.success);
+"@ -split "[\r\n]+"
+
+    $script = @()
+    $script += $intro
+    $script += $lines
+    $script += $outro
+
+    $tmpfile = ([System.IO.Path]::GetTempFileName()) -replace "[.]tmp",".sml"
+
+    $script | Out-File -Encoding "ASCII" $tmpfile
+
+    $env:CM_VERBOSE="false"
+
+    sml $tmpfile
+
+    if (-not $?) {
+        del $tmpfile
+        exit $LastExitCode
+    }
+
+    del $tmpfile
+
+} else {
+
+    "Unknown SML implementation name: $sml"
+    exit 2
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/repoint.sml	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,2707 @@
+(*
+    DO NOT EDIT THIS FILE.
+    This file is automatically generated from the individual
+    source files in the Repoint repository.
+*)
+
+(* 
+    Repoint
+
+    A simple manager for third-party source code dependencies
+
+    Copyright 2018 Chris Cannam, Particular Programs Ltd,
+    and Queen Mary, University of London
+
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use, copy,
+    modify, merge, publish, distribute, sublicense, and/or sell copies
+    of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
+    ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+    CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+    Except as contained in this notice, the names of Chris Cannam,
+    Particular Programs Ltd, and Queen Mary, University of London
+    shall not be used in advertising or otherwise to promote the sale,
+    use or other dealings in this Software without prior written
+    authorization.
+*)
+
+val repoint_version = "1.1"
+
+
+datatype vcs =
+         HG |
+         GIT |
+         SVN
+
+datatype source =
+         URL_SOURCE of string |
+         SERVICE_SOURCE of {
+             service : string,
+             owner : string option,
+             repo : string option
+         }
+
+type id_or_tag = string
+
+datatype pin =
+         UNPINNED |
+         PINNED of id_or_tag
+
+datatype libstate =
+         ABSENT |
+         CORRECT |
+         SUPERSEDED |
+         WRONG
+
+datatype localstate =
+         MODIFIED |
+         LOCK_MISMATCHED |
+         CLEAN
+
+datatype branch =
+         BRANCH of string |
+         DEFAULT_BRANCH
+             
+(* If we can recover from an error, for example by reporting failure
+   for this one thing and going on to the next thing, then the error
+   should usually be returned through a result type rather than an
+   exception. *)
+             
+datatype 'a result =
+         OK of 'a |
+         ERROR of string
+
+type libname = string
+
+type libspec = {
+    libname : libname,
+    vcs : vcs,
+    source : source,
+    branch : branch,
+    project_pin : pin,
+    lock_pin : pin
+}
+
+type lock = {
+    libname : libname,
+    id_or_tag : id_or_tag
+}
+
+type remote_spec = {
+    anon : string option,
+    auth : string option
+}
+
+type provider = {
+    service : string,
+    supports : vcs list,
+    remote_spec : remote_spec
+}
+
+type account = {
+    service : string,
+    login : string
+}
+                    
+type context = {
+    rootpath : string,
+    extdir : string,
+    providers : provider list,
+    accounts : account list
+}
+
+type userconfig = {
+    providers : provider list,
+    accounts : account list
+}
+                   
+type project = {
+    context : context,
+    libs : libspec list
+}
+
+structure RepointFilenames = struct
+    val project_file = "repoint-project.json"
+    val project_lock_file = "repoint-lock.json"
+    val project_completion_file = ".repoint.point"
+    val user_config_file = ".repoint.json"
+    val archive_dir = ".repoint-archive"
+end
+                   
+signature VCS_CONTROL = sig
+
+    (** Check whether the given VCS is installed and working *)
+    val is_working : context -> bool result
+    
+    (** Test whether the library is present locally at all *)
+    val exists : context -> libname -> bool result
+                                            
+    (** Return the id (hash) of the current revision for the library *)
+    val id_of : context -> libname -> id_or_tag result
+
+    (** Test whether the library is at the given id *)
+    val is_at : context -> libname * id_or_tag -> bool result
+
+    (** Test whether the library is on the given branch, i.e. is at
+        the branch tip or an ancestor of it *)
+    val is_on_branch : context -> libname * branch -> bool result
+
+    (** Test whether the library is at the newest revision for the
+        given branch. False may indicate that the branch has advanced
+        or that the library is not on the branch at all. This function
+        may use the network to check for new revisions *)
+    val is_newest : context -> libname * source * branch -> bool result
+
+    (** Test whether the library is at the newest revision available
+        locally for the given branch. False may indicate that the
+        branch has advanced or that the library is not on the branch
+        at all. This function must not use the network *)
+    val is_newest_locally : context -> libname * branch -> bool result
+
+    (** Test whether the library has been modified in the local
+        working copy *)
+    val is_modified_locally : context -> libname -> bool result
+
+    (** Check out, i.e. clone a fresh copy of, the repo for the given
+        library on the given branch *)
+    val checkout : context -> libname * source * branch -> unit result
+
+    (** Update the library to the given branch tip. Assumes that a
+        local copy of the library already exists *)
+    val update : context -> libname * source * branch -> unit result
+
+    (** Update the library to the given specific id or tag *)
+    val update_to : context -> libname * source * id_or_tag -> unit result
+
+    (** Return a URL from which the library can be cloned, given that
+        the local copy already exists. For a DVCS this can be the
+        local copy, but for a centralised VCS it will have to be the
+        remote repository URL. Used for archiving *)
+    val copy_url_for : context -> libname -> string result
+end
+
+signature LIB_CONTROL = sig
+    val review : context -> libspec -> (libstate * localstate) result
+    val status : context -> libspec -> (libstate * localstate) result
+    val update : context -> libspec -> unit result
+    val id_of : context -> libspec -> id_or_tag result
+    val is_working : context -> vcs -> bool result
+end
+
+structure FileBits :> sig
+    val extpath : context -> string
+    val libpath : context -> libname -> string
+    val subpath : context -> libname -> string -> string
+    val command_output : context -> libname -> string list -> string result
+    val command : context -> libname -> string list -> unit result
+    val file_url : string -> string
+    val file_contents : string -> string
+    val mydir : unit -> string
+    val homedir : unit -> string
+    val mkpath : string -> unit result
+    val rmpath : string -> unit result
+    val nonempty_dir_exists : string -> bool
+    val project_spec_path : string -> string
+    val project_lock_path : string -> string
+    val project_completion_path : string -> string
+    val verbose : unit -> bool
+end = struct
+
+    fun verbose () =
+        case OS.Process.getEnv "REPOINT_VERBOSE" of
+            SOME "0" => false
+          | SOME _ => true
+          | NONE => false
+
+    fun split_relative path desc =
+        case OS.Path.fromString path of
+            { isAbs = true, ... } => raise Fail (desc ^ " may not be absolute")
+          | { arcs, ... } => arcs
+                        
+    fun extpath ({ rootpath, extdir, ... } : context) =
+        let val { isAbs, vol, arcs } = OS.Path.fromString rootpath
+        in OS.Path.toString {
+                isAbs = isAbs,
+                vol = vol,
+                arcs = arcs @
+                       split_relative extdir "extdir"
+            }
+        end
+    
+    fun subpath ({ rootpath, extdir, ... } : context) libname remainder =
+        (* NB libname is allowed to be a path fragment, e.g. foo/bar *)
+        let val { isAbs, vol, arcs } = OS.Path.fromString rootpath
+        in OS.Path.toString {
+                isAbs = isAbs,
+                vol = vol,
+                arcs = arcs @
+                       split_relative extdir "extdir" @
+                       split_relative libname "library path" @
+                       split_relative remainder "subpath"
+            }
+        end
+
+    fun libpath context "" =
+        extpath context
+      | libpath context libname =
+        subpath context libname ""
+
+    fun project_file_path rootpath filename =
+        let val { isAbs, vol, arcs } = OS.Path.fromString rootpath
+        in OS.Path.toString {
+                isAbs = isAbs,
+                vol = vol,
+                arcs = arcs @ [ filename ]
+            }
+        end
+                
+    fun project_spec_path rootpath =
+        project_file_path rootpath (RepointFilenames.project_file)
+
+    fun project_lock_path rootpath =
+        project_file_path rootpath (RepointFilenames.project_lock_file)
+
+    fun project_completion_path rootpath =
+        project_file_path rootpath (RepointFilenames.project_completion_file)
+
+    fun trim str =
+        hd (String.fields (fn x => x = #"\n" orelse x = #"\r") str)
+            
+    fun file_url path =
+        let val forward_path = 
+                String.translate (fn #"\\" => "/" |
+                                  c => Char.toString c)
+                                 (OS.Path.mkCanonical path)
+        in
+            (* Path is expected to be absolute already, but if it
+               starts with a drive letter, we'll need an extra slash *)
+            case explode forward_path of
+                #"/"::rest => "file:///" ^ implode rest
+              | _ => "file:///" ^ forward_path
+        end
+        
+    fun file_contents filename =
+        let val stream = TextIO.openIn filename
+            fun read_all str acc =
+                case TextIO.inputLine str of
+                    SOME line => read_all str (trim line :: acc)
+                  | NONE => rev acc
+            val contents = read_all stream []
+            val _ = TextIO.closeIn stream
+        in
+            String.concatWith "\n" contents
+        end
+
+    fun expand_commandline cmdlist =
+        (* We are quite strict about what we accept here, except
+           for the first element in cmdlist which is assumed to be a
+           known command location rather than arbitrary user input. *)
+        let open Char
+            fun quote arg =
+                if List.all
+                       (fn c => isAlphaNum c orelse c = #"-" orelse c = #"_")
+                       (explode arg)
+                then arg
+                else "\"" ^ arg ^ "\""
+            fun check arg =
+                let val valid = explode " /#:;?,._-{}@=+"
+                in
+                    app (fn c =>
+                            if isAlphaNum c orelse
+                               List.exists (fn v => v = c) valid orelse
+                               c > chr 127
+                            then ()
+                            else raise Fail ("Invalid character '" ^
+                                             (Char.toString c) ^
+                                             "' in command list"))
+                        (explode arg);
+                    arg
+                end
+        in
+            String.concatWith " "
+                              (map quote
+                                   (hd cmdlist :: map check (tl cmdlist)))
+        end
+
+    val tick_cycle = ref 0
+    val tick_chars = Vector.fromList (map String.str (explode "|/-\\"))
+
+    fun tick libname cmdlist =
+        let val n = Vector.length tick_chars
+            fun pad_to n str =
+                if n <= String.size str then str
+                else pad_to n (str ^ " ")
+            val name = if libname <> "" then libname
+                       else if cmdlist = nil then ""
+                       else hd (rev cmdlist)
+        in
+            print ("  " ^
+                   Vector.sub(tick_chars, !tick_cycle) ^ " " ^
+                   pad_to 70 name ^
+                   "\r");
+            tick_cycle := (if !tick_cycle = n - 1 then 0 else 1 + !tick_cycle)
+        end
+            
+    fun run_command context libname cmdlist redirect =
+        let open OS
+            val dir = libpath context libname
+            val cmd = expand_commandline cmdlist
+            val _ = if verbose ()
+                    then print ("\n=== " ^ dir ^ "\n<<< " ^ cmd ^ "\n")
+                    else tick libname cmdlist
+            val _ = FileSys.chDir dir
+            val status = case redirect of
+                             NONE => Process.system cmd
+                           | SOME file => Process.system (cmd ^ ">" ^ file)
+        in
+            if Process.isSuccess status
+            then OK ()
+            else ERROR ("Command failed: " ^ cmd ^ " (in dir " ^ dir ^ ")")
+        end
+        handle ex => ERROR ("Unable to run command: " ^ exnMessage ex)
+
+    fun command context libname cmdlist =
+        run_command context libname cmdlist NONE
+            
+    fun command_output context libname cmdlist =
+        let open OS
+            val tmpFile = FileSys.tmpName ()
+            val result = run_command context libname cmdlist (SOME tmpFile)
+            val contents = file_contents tmpFile
+            val _ = if verbose ()
+                    then print (">>> \"" ^ contents ^ "\"\n")
+                    else ()
+        in
+            FileSys.remove tmpFile handle _ => ();
+            case result of
+                OK () => OK contents
+              | ERROR e => ERROR e
+        end
+
+    fun mydir () =
+        let open OS
+            val { dir, file } = Path.splitDirFile (CommandLine.name ())
+        in
+            FileSys.realPath
+                (if Path.isAbsolute dir
+                 then dir
+                 else Path.concat (FileSys.getDir (), dir))
+        end
+
+    fun homedir () =
+        (* Failure is not routine, so we use an exception here *)
+        case (OS.Process.getEnv "HOME",
+              OS.Process.getEnv "HOMEPATH") of
+            (SOME home, _) => home
+          | (NONE, SOME home) => home
+          | (NONE, NONE) =>
+            raise Fail "Failed to look up home directory from environment"
+
+    fun mkpath' path =
+        if OS.FileSys.isDir path handle _ => false
+        then OK ()
+        else case OS.Path.fromString path of
+                 { arcs = nil, ... } => OK ()
+               | { isAbs = false, ... } => ERROR "mkpath requires absolute path"
+               | { isAbs, vol, arcs } => 
+                 case mkpath' (OS.Path.toString {      (* parent *)
+                                    isAbs = isAbs,
+                                    vol = vol,
+                                    arcs = rev (tl (rev arcs)) }) of
+                     ERROR e => ERROR e
+                   | OK () => ((OS.FileSys.mkDir path; OK ())
+                               handle OS.SysErr (e, _) =>
+                                      ERROR ("Directory creation failed: " ^ e))
+
+    fun mkpath path =
+        mkpath' (OS.Path.mkCanonical path)
+
+    fun dir_contents dir =
+        let open OS
+            fun files_from dirstream =
+                case FileSys.readDir dirstream of
+                    NONE => []
+                  | SOME file =>
+                    (* readDir is supposed to filter these, 
+                       but let's be extra cautious: *)
+                    if file = Path.parentArc orelse file = Path.currentArc
+                    then files_from dirstream
+                    else file :: files_from dirstream
+            val stream = FileSys.openDir dir
+            val files = map (fn f => Path.joinDirFile
+                                         { dir = dir, file = f })
+                            (files_from stream)
+            val _ = FileSys.closeDir stream
+        in
+            files
+        end
+
+    fun rmpath' path =
+        let open OS
+            fun remove path =
+                if FileSys.isLink path (* dangling links bother isDir *)
+                then FileSys.remove path
+                else if FileSys.isDir path
+                then (app remove (dir_contents path); FileSys.rmDir path)
+                else FileSys.remove path
+        in
+            (remove path; OK ())
+            handle SysErr (e, _) => ERROR ("Path removal failed: " ^ e)
+        end
+
+    fun rmpath path =
+        rmpath' (OS.Path.mkCanonical path)
+
+    fun nonempty_dir_exists path =
+        let open OS.FileSys
+        in
+            (not (isLink path) andalso
+             isDir path andalso
+             dir_contents path <> [])
+            handle _ => false
+        end                                        
+                
+end
+                                         
+functor LibControlFn (V: VCS_CONTROL) :> LIB_CONTROL = struct
+
+    (* Valid states for unpinned libraries:
+
+       - CORRECT: We are on the right branch and are up-to-date with
+         it as far as we can tell. (If not using the network, this
+         should be reported to user as "Present" rather than "Correct"
+         as the remote repo may have advanced without us knowing.)
+
+       - SUPERSEDED: We are on the right branch but we can see that
+         there is a newer revision either locally or on the remote (in
+         Git terms, we are at an ancestor of the desired branch tip).
+
+       - WRONG: We are on the wrong branch (in Git terms, we are not
+         at the desired branch tip or any ancestor of it).
+
+       - ABSENT: Repo doesn't exist here at all.
+
+       Valid states for pinned libraries:
+
+       - CORRECT: We are at the pinned revision.
+
+       - WRONG: We are at any revision other than the pinned one.
+
+       - ABSENT: Repo doesn't exist here at all.
+    *)
+
+    fun check with_network context
+              ({ libname, source, branch,
+                 project_pin, lock_pin, ... } : libspec) =
+        let fun check_unpinned () =
+                let val newest =
+                        if with_network
+                        then V.is_newest context (libname, source, branch)
+                        else V.is_newest_locally context (libname, branch)
+                in
+                    case newest of
+                         ERROR e => ERROR e
+                       | OK true => OK CORRECT
+                       | OK false =>
+                         case V.is_on_branch context (libname, branch) of
+                             ERROR e => ERROR e
+                           | OK true => OK SUPERSEDED
+                           | OK false => OK WRONG
+                end
+            fun check_pinned target =
+                case V.is_at context (libname, target) of
+                    ERROR e => ERROR e
+                  | OK true => OK CORRECT
+                  | OK false => OK WRONG
+            fun check_remote () =
+                case project_pin of
+                    UNPINNED => check_unpinned ()
+                  | PINNED target => check_pinned target
+            fun check_local () =
+                case V.is_modified_locally context libname of
+                    ERROR e => ERROR e
+                  | OK true  => OK MODIFIED
+                  | OK false => 
+                    case lock_pin of
+                        UNPINNED => OK CLEAN
+                      | PINNED target =>
+                        case V.is_at context (libname, target) of
+                            ERROR e => ERROR e
+                          | OK true => OK CLEAN
+                          | OK false => OK LOCK_MISMATCHED
+        in
+            case V.exists context libname of
+                ERROR e => ERROR e
+              | OK false => OK (ABSENT, CLEAN)
+              | OK true =>
+                case (check_remote (), check_local ()) of
+                    (ERROR e, _) => ERROR e
+                  | (_, ERROR e) => ERROR e
+                  | (OK r, OK l) => OK (r, l)
+        end
+
+    val review = check true
+    val status = check false
+
+    fun update context
+               ({ libname, source, branch,
+                  project_pin, lock_pin, ... } : libspec) =
+        let fun update_unpinned () =
+                case V.is_newest context (libname, source, branch) of
+                    ERROR e => ERROR e
+                  | OK true => OK ()
+                  | OK false => V.update context (libname, source, branch)
+            fun update_pinned target =
+                case V.is_at context (libname, target) of
+                    ERROR e => ERROR e
+                  | OK true => OK ()
+                  | OK false => V.update_to context (libname, source, target)
+            fun update' () =
+                case lock_pin of
+                    PINNED target => update_pinned target
+                  | UNPINNED =>
+                    case project_pin of
+                        PINNED target => update_pinned target
+                      | UNPINNED => update_unpinned ()
+        in
+            case V.exists context libname of
+                ERROR e => ERROR e
+              | OK true => update' ()
+              | OK false =>
+                case V.checkout context (libname, source, branch) of
+                    ERROR e => ERROR e
+                  | OK () => update' ()
+        end
+
+    fun id_of context ({ libname, ... } : libspec) =
+        V.id_of context libname
+
+    fun is_working context vcs =
+        V.is_working context
+                
+end
+
+(* Simple Standard ML JSON parser
+   https://bitbucket.org/cannam/sml-simplejson
+   Copyright 2017 Chris Cannam. BSD licence.
+   Parts based on the JSON parser in the Ponyo library by Phil Eaton.
+*)
+
+signature JSON = sig
+
+    datatype json = OBJECT of (string * json) list
+                  | ARRAY of json list
+                  | NUMBER of real
+                  | STRING of string
+                  | BOOL of bool
+                  | NULL
+
+    datatype 'a result = OK of 'a
+                       | ERROR of string
+
+    val parse : string -> json result
+    val serialise : json -> string
+    val serialiseIndented : json -> string
+
+end
+
+structure Json :> JSON = struct
+
+    datatype json = OBJECT of (string * json) list
+                  | ARRAY of json list
+                  | NUMBER of real
+                  | STRING of string
+                  | BOOL of bool
+                  | NULL
+
+    datatype 'a result = OK of 'a
+                       | ERROR of string
+
+    structure T = struct
+        datatype token = NUMBER of char list
+                       | STRING of string
+                       | BOOL of bool
+                       | NULL
+                       | CURLY_L
+                       | CURLY_R
+                       | SQUARE_L
+                       | SQUARE_R
+                       | COLON
+                       | COMMA
+
+        fun toString t =
+            case t of NUMBER digits => implode digits
+                    | STRING s => s
+                    | BOOL b => Bool.toString b
+                    | NULL => "null"
+                    | CURLY_L => "{"
+                    | CURLY_R => "}"
+                    | SQUARE_L => "["
+                    | SQUARE_R => "]"
+                    | COLON => ":"
+                    | COMMA => ","
+    end
+
+    fun bmpToUtf8 cp =  (* convert a codepoint in Unicode BMP to utf8 bytes *)
+        let open Word
+	    infix 6 orb andb >>
+        in
+            map (Char.chr o toInt)
+                (if cp < 0wx80 then
+                     [cp]
+                 else if cp < 0wx800 then
+                     [0wxc0 orb (cp >> 0w6), 0wx80 orb (cp andb 0wx3f)]
+                 else if cp < 0wx10000 then
+                     [0wxe0 orb (cp >> 0w12),
+                      0wx80 orb ((cp >> 0w6) andb 0wx3f),
+		      0wx80 orb (cp andb 0wx3f)]
+                 else raise Fail ("Invalid BMP point " ^ (Word.toString cp)))
+        end
+                      
+    fun error pos text = ERROR (text ^ " at character position " ^
+                                Int.toString (pos - 1))
+    fun token_error pos = error pos ("Unexpected token")
+
+    fun lexNull pos acc (#"u" :: #"l" :: #"l" :: xs) =
+        lex (pos + 3) (T.NULL :: acc) xs
+      | lexNull pos acc _ = token_error pos
+
+    and lexTrue pos acc (#"r" :: #"u" :: #"e" :: xs) =
+        lex (pos + 3) (T.BOOL true :: acc) xs
+      | lexTrue pos acc _ = token_error pos
+
+    and lexFalse pos acc (#"a" :: #"l" :: #"s" :: #"e" :: xs) =
+        lex (pos + 4) (T.BOOL false :: acc) xs
+      | lexFalse pos acc _ = token_error pos
+
+    and lexChar tok pos acc xs =
+        lex pos (tok :: acc) xs
+        
+    and lexString pos acc cc =
+        let datatype escaped = ESCAPED | NORMAL
+            fun lexString' pos text ESCAPED [] =
+                error pos "End of input during escape sequence"
+              | lexString' pos text NORMAL [] = 
+                error pos "End of input during string"
+              | lexString' pos text ESCAPED (x :: xs) =
+                let fun esc c = lexString' (pos + 1) (c :: text) NORMAL xs
+                in case x of
+                       #"\"" => esc x
+                     | #"\\" => esc x
+                     | #"/"  => esc x
+                     | #"b"  => esc #"\b"
+                     | #"f"  => esc #"\f"
+                     | #"n"  => esc #"\n"
+                     | #"r"  => esc #"\r"
+                     | #"t"  => esc #"\t"
+                     | _     => error pos ("Invalid escape \\" ^
+                                           Char.toString x)
+                end
+              | lexString' pos text NORMAL (#"\\" :: #"u" ::a::b::c::d:: xs) =
+                if List.all Char.isHexDigit [a,b,c,d]
+                then case Word.fromString ("0wx" ^ (implode [a,b,c,d])) of
+                         SOME w => (let val utf = rev (bmpToUtf8 w) in
+                                        lexString' (pos + 6) (utf @ text)
+                                                   NORMAL xs
+                                    end
+                                    handle Fail err => error pos err)
+                       | NONE => error pos "Invalid Unicode BMP escape sequence"
+                else error pos "Invalid Unicode BMP escape sequence"
+              | lexString' pos text NORMAL (x :: xs) =
+                if Char.ord x < 0x20
+                then error pos "Invalid unescaped control character"
+                else
+                    case x of
+                        #"\"" => OK (rev text, xs, pos + 1)
+                      | #"\\" => lexString' (pos + 1) text ESCAPED xs
+                      | _     => lexString' (pos + 1) (x :: text) NORMAL xs
+        in
+            case lexString' pos [] NORMAL cc of
+                OK (text, rest, newpos) =>
+                lex newpos (T.STRING (implode text) :: acc) rest
+              | ERROR e => ERROR e
+        end
+
+    and lexNumber firstChar pos acc cc =
+        let val valid = explode ".+-e"
+            fun lexNumber' pos digits [] = (rev digits, [], pos)
+              | lexNumber' pos digits (x :: xs) =
+                if x = #"E" then lexNumber' (pos + 1) (#"e" :: digits) xs
+                else if Char.isDigit x orelse List.exists (fn c => x = c) valid
+                then lexNumber' (pos + 1) (x :: digits) xs
+                else (rev digits, x :: xs, pos)
+            val (digits, rest, newpos) =
+                lexNumber' (pos - 1) [] (firstChar :: cc)
+        in
+            case digits of
+                [] => token_error pos
+              | _ => lex newpos (T.NUMBER digits :: acc) rest
+        end
+                                           
+    and lex pos acc [] = OK (rev acc)
+      | lex pos acc (x::xs) = 
+        (case x of
+             #" "  => lex
+           | #"\t" => lex
+           | #"\n" => lex
+           | #"\r" => lex
+           | #"{"  => lexChar T.CURLY_L
+           | #"}"  => lexChar T.CURLY_R
+           | #"["  => lexChar T.SQUARE_L
+           | #"]"  => lexChar T.SQUARE_R
+           | #":"  => lexChar T.COLON
+           | #","  => lexChar T.COMMA
+           | #"\"" => lexString
+           | #"t"  => lexTrue
+           | #"f"  => lexFalse
+           | #"n"  => lexNull
+           | x     => lexNumber x) (pos + 1) acc xs
+
+    fun show [] = "end of input"
+      | show (tok :: _) = T.toString tok
+
+    fun parseNumber digits =
+        (* Note lexNumber already case-insensitised the E for us *)
+        let open Char
+
+            fun okExpDigits [] = false
+              | okExpDigits (c :: []) = isDigit c
+              | okExpDigits (c :: cs) = isDigit c andalso okExpDigits cs
+
+            fun okExponent [] = false
+              | okExponent (#"+" :: cs) = okExpDigits cs
+              | okExponent (#"-" :: cs) = okExpDigits cs
+              | okExponent cc = okExpDigits cc
+
+            fun okFracTrailing [] = true
+              | okFracTrailing (c :: cs) =
+                (isDigit c andalso okFracTrailing cs) orelse
+                (c = #"e" andalso okExponent cs)
+
+            fun okFraction [] = false
+              | okFraction (c :: cs) =
+                isDigit c andalso okFracTrailing cs
+
+            fun okPosTrailing [] = true
+              | okPosTrailing (#"." :: cs) = okFraction cs
+              | okPosTrailing (#"e" :: cs) = okExponent cs
+              | okPosTrailing (c :: cs) =
+                isDigit c andalso okPosTrailing cs
+                                                      
+            fun okPositive [] = false
+              | okPositive (#"0" :: []) = true
+              | okPositive (#"0" :: #"." :: cs) = okFraction cs
+              | okPositive (#"0" :: #"e" :: cs) = okExponent cs
+              | okPositive (#"0" :: cs) = false
+              | okPositive (c :: cs) = isDigit c andalso okPosTrailing cs
+                    
+            fun okNumber (#"-" :: cs) = okPositive cs
+              | okNumber cc = okPositive cc
+        in
+            if okNumber digits
+            then case Real.fromString (implode digits) of
+                     NONE => ERROR "Number out of range"
+                   | SOME r => OK r
+            else ERROR ("Invalid number \"" ^ (implode digits) ^ "\"")
+        end
+                                     
+    fun parseObject (T.CURLY_R :: xs) = OK (OBJECT [], xs)
+      | parseObject tokens =
+        let fun parsePair (T.STRING key :: T.COLON :: xs) =
+                (case parseTokens xs of
+                     ERROR e => ERROR e
+                   | OK (j, xs) => OK ((key, j), xs))
+              | parsePair other =
+                ERROR ("Object key/value pair expected around \"" ^
+                       show other ^ "\"")
+            fun parseObject' acc [] = ERROR "End of input during object"
+              | parseObject' acc tokens =
+                case parsePair tokens of
+                    ERROR e => ERROR e
+                  | OK (pair, T.COMMA :: xs) =>
+                    parseObject' (pair :: acc) xs
+                  | OK (pair, T.CURLY_R :: xs) =>
+                    OK (OBJECT (rev (pair :: acc)), xs)
+                  | OK (_, _) => ERROR "Expected , or } after object element"
+        in
+            parseObject' [] tokens
+        end
+
+    and parseArray (T.SQUARE_R :: xs) = OK (ARRAY [], xs)
+      | parseArray tokens =
+        let fun parseArray' acc [] = ERROR "End of input during array"
+              | parseArray' acc tokens =
+                case parseTokens tokens of
+                    ERROR e => ERROR e
+                  | OK (j, T.COMMA :: xs) => parseArray' (j :: acc) xs
+                  | OK (j, T.SQUARE_R :: xs) => OK (ARRAY (rev (j :: acc)), xs)
+                  | OK (_, _) => ERROR "Expected , or ] after array element"
+        in
+            parseArray' [] tokens
+        end
+
+    and parseTokens [] = ERROR "Value expected"
+      | parseTokens (tok :: xs) =
+        (case tok of
+             T.NUMBER d => (case parseNumber d of
+                                OK r => OK (NUMBER r, xs)
+                              | ERROR e => ERROR e)
+           | T.STRING s => OK (STRING s, xs)
+           | T.BOOL b   => OK (BOOL b, xs)
+           | T.NULL     => OK (NULL, xs)
+           | T.CURLY_L  => parseObject xs
+           | T.SQUARE_L => parseArray xs
+           | _ => ERROR ("Unexpected token " ^ T.toString tok ^
+                         " before " ^ show xs))
+                                   
+    fun parse str =
+        case lex 1 [] (explode str) of
+           ERROR e => ERROR e
+         | OK tokens => case parseTokens tokens of
+                            OK (value, []) => OK value
+                          | OK (_, _) => ERROR "Extra data after input"
+                          | ERROR e => ERROR e
+
+    fun stringEscape s =
+        let fun esc x = [x, #"\\"]
+            fun escape' acc [] = rev acc
+              | escape' acc (x :: xs) =
+                escape' (case x of
+                             #"\"" => esc x @ acc
+                           | #"\\" => esc x @ acc
+                           | #"\b" => esc #"b" @ acc
+                           | #"\f" => esc #"f" @ acc
+                           | #"\n" => esc #"n" @ acc
+                           | #"\r" => esc #"r" @ acc
+                           | #"\t" => esc #"t" @ acc
+                           | _ =>
+                             let val c = Char.ord x
+                             in
+                                 if c < 0x20
+                                 then let val hex = Word.toString (Word.fromInt c)
+                                      in (rev o explode) (if c < 0x10
+                                                          then ("\\u000" ^ hex)
+                                                          else ("\\u00" ^ hex))
+                                      end @ acc
+                                 else 
+                                     x :: acc
+                             end)
+                        xs
+        in
+            implode (escape' [] (explode s))
+        end
+        
+    fun serialise json =
+        case json of
+            OBJECT pp => "{" ^ String.concatWith
+                                   "," (map (fn (key, value) =>
+                                                serialise (STRING key) ^ ":" ^
+                                                serialise value) pp) ^
+                         "}"
+          | ARRAY arr => "[" ^ String.concatWith "," (map serialise arr) ^ "]"
+          | NUMBER n => implode (map (fn #"~" => #"-" | c => c) 
+                                     (explode (Real.toString n)))
+          | STRING s => "\"" ^ stringEscape s ^ "\""
+          | BOOL b => Bool.toString b
+          | NULL => "null"
+        
+    fun serialiseIndented json =
+        let fun indent 0 = ""
+              | indent i = "  " ^ indent (i - 1)
+            fun serialiseIndented' i json =
+                let val ser = serialiseIndented' (i + 1)
+                in
+                    case json of
+                        OBJECT [] => "{}"
+                      | ARRAY [] => "[]"
+                      | OBJECT pp => "{\n" ^ indent (i + 1) ^
+                                     String.concatWith
+                                         (",\n" ^ indent (i + 1))
+                                         (map (fn (key, value) =>
+                                                  ser (STRING key) ^ ": " ^
+                                                  ser value) pp) ^
+                                     "\n" ^ indent i ^ "}"
+                      | ARRAY arr => "[\n" ^ indent (i + 1) ^
+                                     String.concatWith
+                                         (",\n" ^ indent (i + 1))
+                                         (map ser arr) ^
+                                     "\n" ^ indent i ^ "]"
+                      | other => serialise other
+                end
+        in
+            serialiseIndented' 0 json ^ "\n"
+        end
+                                             
+end
+
+
+structure JsonBits :> sig
+    exception Config of string
+    val load_json_from : string -> Json.json (* filename -> json *)
+    val save_json_to : string -> Json.json -> unit
+    val lookup_optional : Json.json -> string list -> Json.json option
+    val lookup_optional_string : Json.json -> string list -> string option
+    val lookup_mandatory : Json.json -> string list -> Json.json
+    val lookup_mandatory_string : Json.json -> string list -> string
+end = struct
+
+    exception Config of string
+
+    fun load_json_from filename =
+        case Json.parse (FileBits.file_contents filename) of
+            Json.OK json => json
+          | Json.ERROR e => raise Config ("Failed to parse file: " ^ e)
+
+    fun save_json_to filename json =
+        (* using binary I/O to avoid ever writing CR/LF line endings *)
+        let val jstr = Json.serialiseIndented json
+            val stream = BinIO.openOut filename
+        in
+            BinIO.output (stream, Byte.stringToBytes jstr);
+            BinIO.closeOut stream
+        end
+                                  
+    fun lookup_optional json kk =
+        let fun lookup key =
+                case json of
+                    Json.OBJECT kvs =>
+                    (case List.filter (fn (k, v) => k = key) kvs of
+                         [] => NONE
+                       | [(_,v)] => SOME v
+                       | _ => raise Config ("Duplicate key: " ^ 
+                                            (String.concatWith " -> " kk)))
+                  | _ => raise Config "Object expected"
+        in
+            case kk of
+                [] => NONE
+              | key::[] => lookup key
+              | key::kk => case lookup key of
+                               NONE => NONE
+                             | SOME j => lookup_optional j kk
+        end
+                       
+    fun lookup_optional_string json kk =
+        case lookup_optional json kk of
+            SOME (Json.STRING s) => SOME s
+          | SOME _ => raise Config ("Value (if present) must be string: " ^
+                                    (String.concatWith " -> " kk))
+          | NONE => NONE
+
+    fun lookup_mandatory json kk =
+        case lookup_optional json kk of
+            SOME v => v
+          | NONE => raise Config ("Value is mandatory: " ^
+                                  (String.concatWith " -> " kk))
+                          
+    fun lookup_mandatory_string json kk =
+        case lookup_optional json kk of
+            SOME (Json.STRING s) => s
+          | _ => raise Config ("Value must be string: " ^
+                               (String.concatWith " -> " kk))
+end
+
+structure Provider :> sig
+    val load_providers : Json.json -> provider list
+    val load_more_providers : provider list -> Json.json -> provider list
+    val remote_url : context -> vcs -> source -> libname -> string
+end = struct
+
+    val known_providers : provider list =
+        [ {
+            service = "bitbucket",
+            supports = [HG, GIT],
+            remote_spec = {
+                anon = SOME "https://bitbucket.org/{owner}/{repository}",
+                auth = SOME "ssh://{vcs}@bitbucket.org/{owner}/{repository}"
+            }
+          },
+          {
+            service = "github",
+            supports = [GIT],
+            remote_spec = {
+                anon = SOME "https://github.com/{owner}/{repository}",
+                auth = SOME "ssh://{vcs}@github.com/{owner}/{repository}"
+            }
+          }
+        ]
+
+    fun vcs_name vcs =
+        case vcs of HG => "hg"
+                  | GIT => "git"
+                  | SVN => "svn"
+                                             
+    fun vcs_from_name name =
+        case name of "hg" => HG
+                   | "git" => GIT 
+                   | "svn" => SVN
+                   | other => raise Fail ("Unknown vcs name \"" ^ name ^ "\"")
+
+    fun load_more_providers previously_loaded json =
+        let open JsonBits
+            fun load pjson pname : provider =
+                {
+                  service = pname,
+                  supports =
+                  case lookup_mandatory pjson ["vcs"] of
+                      Json.ARRAY vv =>
+                      map (fn (Json.STRING v) => vcs_from_name v
+                          | _ => raise Fail "Strings expected in vcs array")
+                          vv
+                    | _ => raise Fail "Array expected for vcs",
+                  remote_spec = {
+                      anon = lookup_optional_string pjson ["anonymous"],
+                      auth = lookup_optional_string pjson ["authenticated"]
+                  }
+                }
+            val loaded = 
+                case lookup_optional json ["services"] of
+                    NONE => []
+                  | SOME (Json.OBJECT pl) => map (fn (k, v) => load v k) pl
+                  | _ => raise Fail "Object expected for services in config"
+            val newly_loaded =
+                List.filter (fn p => not (List.exists (fn pp => #service p =
+                                                                #service pp)
+                                                      previously_loaded))
+                            loaded
+        in
+            previously_loaded @ newly_loaded
+        end
+
+    fun load_providers json =
+        load_more_providers known_providers json
+                                                    
+    fun expand_spec spec { vcs, service, owner, repo } login =
+        (* ugly *)
+        let fun replace str = 
+                case str of
+                    "vcs" => vcs_name vcs
+                  | "service" => service
+                  | "owner" =>
+                    (case owner of
+                         SOME ostr => ostr
+                       | NONE => raise Fail ("Owner not specified for service " ^
+                                             service))
+                  | "repository" => repo
+                  | "account" =>
+                    (case login of
+                         SOME acc => acc
+                       | NONE => raise Fail ("Account not given for service " ^
+                                             service))
+                  | other => raise Fail ("Unknown variable \"" ^ other ^
+                                         "\" in spec for service " ^ service)
+            fun expand' acc sstr =
+                case Substring.splitl (fn c => c <> #"{") sstr of
+                    (pfx, sfx) =>
+                    if Substring.isEmpty sfx
+                    then rev (pfx :: acc)
+                    else 
+                        case Substring.splitl (fn c => c <> #"}") sfx of
+                            (tok, remainder) =>
+                            if Substring.isEmpty remainder
+                            then rev (tok :: pfx :: acc)
+                            else let val replacement =
+                                         replace
+                                             (* tok begins with "{": *)
+                                             (Substring.string
+                                                  (Substring.triml 1 tok))
+                                 in
+                                     expand' (Substring.full replacement ::
+                                              pfx :: acc)
+                                             (* remainder begins with "}": *)
+                                             (Substring.triml 1 remainder)
+                                 end
+        in
+            Substring.concat (expand' [] (Substring.full spec))
+        end
+        
+    fun provider_url req login providers =
+        case providers of
+            [] => raise Fail ("Unknown service \"" ^ (#service req) ^
+                              "\" for vcs \"" ^ (vcs_name (#vcs req)) ^ "\"")
+          | ({ service, supports, remote_spec : remote_spec } :: rest) =>
+            if service <> (#service req) orelse
+               not (List.exists (fn v => v = (#vcs req)) supports)
+            then provider_url req login rest
+            else
+                case (login, #auth remote_spec, #anon remote_spec) of
+                    (SOME _, SOME auth, _) => expand_spec auth req login
+                  | (SOME _, _, SOME anon) => expand_spec anon req NONE
+                  | (NONE,   _, SOME anon) => expand_spec anon req NONE
+                  | _ => raise Fail ("No suitable anonymous or authenticated " ^
+                                     "URL spec provided for service \"" ^
+                                     service ^ "\"")
+
+    fun login_for ({ accounts, ... } : context) service =
+        case List.find (fn a => service = #service a) accounts of
+            SOME { login, ... } => SOME login
+          | NONE => NONE
+
+    fun reponame_for path =
+        case String.tokens (fn c => c = #"/") path of
+            [] => raise Fail "Non-empty library path required"
+          | toks => hd (rev toks)
+                        
+    fun remote_url (context : context) vcs source libname =
+        case source of
+            URL_SOURCE u => u
+          | SERVICE_SOURCE { service, owner, repo } =>
+            provider_url { vcs = vcs,
+                           service = service,
+                           owner = owner,
+                           repo = case repo of
+                                      SOME r => r
+                                    | NONE => reponame_for libname }
+                         (login_for context service)
+                         (#providers context)
+end
+
+structure HgControl :> VCS_CONTROL = struct
+
+    (* Pulls always use an explicit URL, never just the default
+       remote, in order to ensure we update properly if the location
+       given in the project file changes. *)
+
+    type vcsstate = { id: string, modified: bool,
+                      branch: string, tags: string list }
+
+    val hg_program = "hg"
+                        
+    val hg_args = [ "--config", "ui.interactive=true",
+                    "--config", "ui.merge=:merge" ]
+                        
+    fun hg_command context libname args =
+        FileBits.command context libname (hg_program :: hg_args @ args)
+
+    fun hg_command_output context libname args =
+        FileBits.command_output context libname (hg_program :: hg_args @ args)
+
+    fun is_working context =
+        case hg_command_output context "" ["--version"] of
+            OK "" => OK false
+          | OK _ => OK true
+          | ERROR e => ERROR e
+
+    fun exists context libname =
+        OK (OS.FileSys.isDir (FileBits.subpath context libname ".hg"))
+        handle _ => OK false
+
+    fun remote_for context (libname, source) =
+        Provider.remote_url context HG source libname
+
+    fun current_state context libname : vcsstate result =
+        let fun is_branch text = text <> "" andalso #"(" = hd (explode text)
+            and extract_branch b =
+                if is_branch b     (* need to remove enclosing parens *)
+                then (implode o rev o tl o rev o tl o explode) b
+                else "default"
+            and is_modified id = id <> "" andalso #"+" = hd (rev (explode id))
+            and extract_id id =
+                if is_modified id  (* need to remove trailing "+" *)
+                then (implode o rev o tl o rev o explode) id
+                else id
+            and split_tags tags = String.tokens (fn c => c = #"/") tags
+            and state_for (id, branch, tags) =
+                OK { id = extract_id id,
+                     modified = is_modified id,
+                     branch = extract_branch branch,
+                     tags = split_tags tags }
+        in        
+            case hg_command_output context libname ["id"] of
+                ERROR e => ERROR e
+              | OK out =>
+                case String.tokens (fn x => x = #" ") out of
+                    [id, branch, tags] => state_for (id, branch, tags)
+                  | [id, other] => if is_branch other
+                                   then state_for (id, other, "")
+                                   else state_for (id, "", other)
+                  | [id] => state_for (id, "", "")
+                  | _ => ERROR ("Unexpected output from hg id: " ^ out)
+        end
+
+    fun branch_name branch = case branch of
+                                 DEFAULT_BRANCH => "default"
+                               | BRANCH "" => "default"
+                               | BRANCH b => b
+
+    fun id_of context libname =
+        case current_state context libname of
+            ERROR e => ERROR e
+          | OK { id, ... } => OK id
+
+    fun is_at context (libname, id_or_tag) =
+        case current_state context libname of
+            ERROR e => ERROR e
+          | OK { id, tags, ... } => 
+            OK (String.isPrefix id_or_tag id orelse
+                String.isPrefix id id_or_tag orelse
+                List.exists (fn t => t = id_or_tag) tags)
+
+    fun is_on_branch context (libname, b) =
+        case current_state context libname of
+            ERROR e => ERROR e
+          | OK { branch, ... } => OK (branch = branch_name b)
+               
+    fun is_newest_locally context (libname, branch) =
+        case hg_command_output context libname
+                               ["log", "-l1",
+                                "-b", branch_name branch,
+                                "--template", "{node}"] of
+            ERROR e => OK false (* desired branch does not exist *)
+          | OK newest_in_repo => is_at context (libname, newest_in_repo)
+
+    fun pull context (libname, source) =
+        let val url = remote_for context (libname, source)
+        in
+            hg_command context libname
+                       (if FileBits.verbose ()
+                        then ["pull", url]
+                        else ["pull", "-q", url])
+        end
+
+    fun is_newest context (libname, source, branch) =
+        case is_newest_locally context (libname, branch) of
+            ERROR e => ERROR e
+          | OK false => OK false
+          | OK true =>
+            case pull context (libname, source) of
+                ERROR e => ERROR e
+              | _ => is_newest_locally context (libname, branch)
+
+    fun is_modified_locally context libname =
+        case current_state context libname of
+            ERROR e => ERROR e
+          | OK { modified, ... } => OK modified
+                
+    fun checkout context (libname, source, branch) =
+        let val url = remote_for context (libname, source)
+        in
+            (* make the lib dir rather than just the ext dir, since
+               the lib dir might be nested and hg will happily check
+               out into an existing empty dir anyway *)
+            case FileBits.mkpath (FileBits.libpath context libname) of
+                ERROR e => ERROR e
+              | _ => hg_command context ""
+                                ["clone", "-u", branch_name branch,
+                                 url, libname]
+        end
+                                                    
+    fun update context (libname, source, branch) =
+        let val pull_result = pull context (libname, source)
+        in
+            case hg_command context libname ["update", branch_name branch] of
+                ERROR e => ERROR e
+              | _ =>
+                case pull_result of
+                    ERROR e => ERROR e
+                  | _ => OK ()
+        end
+
+    fun update_to context (libname, _, "") =
+        ERROR "Non-empty id (tag or revision id) required for update_to"
+      | update_to context (libname, source, id) = 
+        let val pull_result = pull context (libname, source)
+        in
+            case hg_command context libname ["update", "-r", id] of
+                OK _ => OK ()
+              | ERROR e =>
+                case pull_result of
+                    ERROR e' => ERROR e' (* this was the ur-error *)
+                  | _ => ERROR e
+        end
+
+    fun copy_url_for context libname =
+        OK (FileBits.file_url (FileBits.libpath context libname))
+            
+end
+
+structure GitControl :> VCS_CONTROL = struct
+
+    (* With Git repos we always operate in detached HEAD state. Even
+       the master branch is checked out using a remote reference
+       (repoint/master). The remote we use is always named repoint, and we
+       update it to the expected URL each time we fetch, in order to
+       ensure we update properly if the location given in the project
+       file changes. The origin remote is unused. *)
+
+    val git_program = "git"
+                      
+    fun git_command context libname args =
+        FileBits.command context libname (git_program :: args)
+
+    fun git_command_output context libname args =
+        FileBits.command_output context libname (git_program :: args)
+
+    fun is_working context =
+        case git_command_output context "" ["--version"] of
+            OK "" => OK false
+          | OK _ => OK true
+          | ERROR e => ERROR e
+                            
+    fun exists context libname =
+        OK (OS.FileSys.isDir (FileBits.subpath context libname ".git"))
+        handle _ => OK false
+
+    fun remote_for context (libname, source) =
+        Provider.remote_url context GIT source libname
+
+    fun branch_name branch = case branch of
+                                 DEFAULT_BRANCH => "master"
+                               | BRANCH "" => "master"
+                               | BRANCH b => b
+
+    val our_remote = "repoint"
+                                                 
+    fun remote_branch_name branch = our_remote ^ "/" ^ branch_name branch
+
+    fun checkout context (libname, source, branch) =
+        let val url = remote_for context (libname, source)
+        in
+            (* make the lib dir rather than just the ext dir, since
+               the lib dir might be nested and git will happily check
+               out into an existing empty dir anyway *)
+            case FileBits.mkpath (FileBits.libpath context libname) of
+                OK () => git_command context ""
+                                     ["clone", "--origin", our_remote,
+                                      "--branch", branch_name branch,
+                                      url, libname]
+              | ERROR e => ERROR e
+        end
+
+    fun add_our_remote context (libname, source) =
+        (* When we do the checkout ourselves (above), we add the
+           remote at the same time. But if the repo was cloned by
+           someone else, we'll need to do it after the fact. Git
+           doesn't seem to have a means to add a remote or change its
+           url if it already exists; seems we have to do this: *)
+        let val url = remote_for context (libname, source)
+        in
+            case git_command context libname
+                             ["remote", "set-url", our_remote, url] of
+                OK () => OK ()
+              | ERROR e => git_command context libname
+                                       ["remote", "add", "-f", our_remote, url]
+        end
+
+    (* NB git rev-parse HEAD shows revision id of current checkout;
+       git rev-list -1 <tag> shows revision id of revision with that tag *)
+
+    fun id_of context libname =
+        git_command_output context libname ["rev-parse", "HEAD"]
+            
+    fun is_at context (libname, id_or_tag) =
+        case id_of context libname of
+            ERROR e => OK false (* HEAD nonexistent, expected in empty repo *)
+          | OK id =>
+            if String.isPrefix id_or_tag id orelse
+               String.isPrefix id id_or_tag
+            then OK true
+            else is_at_tag context (libname, id, id_or_tag)
+
+    and is_at_tag context (libname, id, tag) =
+        (* For annotated tags (with message) show-ref returns the tag
+           object ref rather than that of the revision being tagged;
+           we need the subsequent rev-list to chase that up. In fact
+           the rev-list on its own is enough to get us the id direct
+           from the tag name, but it fails with an error if the tag
+           doesn't exist, whereas we want to handle that quietly in
+           case the tag simply hasn't been pulled yet *)
+        case git_command_output context libname
+                                ["show-ref", "refs/tags/" ^ tag, "--"] of
+            OK "" => OK false (* Not a tag *)
+          | ERROR _ => OK false
+          | OK s =>
+            let val tag_ref = hd (String.tokens (fn c => c = #" ") s)
+            in
+                case git_command_output context libname
+                                        ["rev-list", "-1", tag_ref] of
+                    OK tagged => OK (id = tagged)
+                  | ERROR _ => OK false
+            end
+                           
+    fun branch_tip context (libname, branch) =
+        (* We don't have access to the source info or the network
+           here, as this is used by status (e.g. via is_on_branch) as
+           well as review. It's possible the remote branch won't exist,
+           e.g. if the repo was checked out by something other than
+           Repoint, and if that's the case, we can't add it here; we'll
+           just have to fail, since checking against local branches
+           instead could produce the wrong result. *)
+        git_command_output context libname
+                           ["rev-list", "-1",
+                            remote_branch_name branch, "--"]
+                       
+    fun is_newest_locally context (libname, branch) =
+        case branch_tip context (libname, branch) of
+            ERROR e => OK false
+          | OK rev => is_at context (libname, rev)
+
+    fun is_on_branch context (libname, branch) =
+        case branch_tip context (libname, branch) of
+            ERROR e => OK false
+          | OK rev =>
+            case is_at context (libname, rev) of
+                ERROR e => ERROR e
+              | OK true => OK true
+              | OK false =>
+                case git_command context libname
+                                 ["merge-base", "--is-ancestor",
+                                  "HEAD", remote_branch_name branch] of
+                    ERROR e => OK false  (* cmd returns non-zero for no *)
+                  | _ => OK true
+
+    fun fetch context (libname, source) =
+        case add_our_remote context (libname, source) of
+            ERROR e => ERROR e
+          | _ => git_command context libname ["fetch", our_remote]
+                            
+    fun is_newest context (libname, source, branch) =
+        case add_our_remote context (libname, source) of
+            ERROR e => ERROR e
+          | OK () => 
+            case is_newest_locally context (libname, branch) of
+                ERROR e => ERROR e
+              | OK false => OK false
+              | OK true =>
+                case fetch context (libname, source) of
+                    ERROR e => ERROR e
+                  | _ => is_newest_locally context (libname, branch)
+
+    fun is_modified_locally context libname =
+        case git_command_output context libname ["status", "--porcelain"] of
+            ERROR e => ERROR e
+          | OK "" => OK false
+          | OK _ => OK true
+
+    (* This function updates to the latest revision on a branch rather
+       than to a specific id or tag. We can't just checkout the given
+       branch, as that will succeed even if the branch isn't up to
+       date. We could checkout the branch and then fetch and merge,
+       but it's perhaps cleaner not to maintain a local branch at all,
+       but instead checkout the remote branch as a detached head. *)
+
+    fun update context (libname, source, branch) =
+        case fetch context (libname, source) of
+            ERROR e => ERROR e
+          | _ =>
+            case git_command context libname ["checkout", "--detach",
+                                              remote_branch_name branch] of
+                ERROR e => ERROR e
+              | _ => OK ()
+
+    (* This function is dealing with a specific id or tag, so if we
+       can successfully check it out (detached) then that's all we
+       need to do, regardless of whether fetch succeeded or not. We do
+       attempt the fetch first, though, purely in order to avoid ugly
+       error messages in the common case where we're being asked to
+       update to a new pin (from the lock file) that hasn't been
+       fetched yet. *)
+
+    fun update_to context (libname, _, "") = 
+        ERROR "Non-empty id (tag or revision id) required for update_to"
+      | update_to context (libname, source, id) =
+        let val fetch_result = fetch context (libname, source)
+        in
+            case git_command context libname ["checkout", "--detach", id] of
+                OK _ => OK ()
+              | ERROR e =>
+                case fetch_result of
+                    ERROR e' => ERROR e' (* this was the ur-error *)
+                  | _ => ERROR e
+        end
+
+    fun copy_url_for context libname =
+        OK (FileBits.file_url (FileBits.libpath context libname))
+            
+end
+
+(* SubXml - A parser for a subset of XML
+   https://bitbucket.org/cannam/sml-subxml
+   Copyright 2018 Chris Cannam. BSD licence.
+*)
+
+signature SUBXML = sig
+
+    datatype node = ELEMENT of { name : string, children : node list }
+                  | ATTRIBUTE of { name : string, value : string }
+                  | TEXT of string
+                  | CDATA of string
+                  | COMMENT of string
+
+    datatype document = DOCUMENT of { name : string, children : node list }
+
+    datatype 'a result = OK of 'a
+                       | ERROR of string
+
+    val parse : string -> document result
+    val serialise : document -> string
+                                  
+end
+
+structure SubXml :> SUBXML = struct
+
+    datatype node = ELEMENT of { name : string, children : node list }
+                  | ATTRIBUTE of { name : string, value : string }
+                  | TEXT of string
+                  | CDATA of string
+                  | COMMENT of string
+
+    datatype document = DOCUMENT of { name : string, children : node list }
+
+    datatype 'a result = OK of 'a
+                       | ERROR of string
+
+    structure T = struct
+        datatype token = ANGLE_L
+                       | ANGLE_R
+                       | ANGLE_SLASH_L
+                       | SLASH_ANGLE_R
+                       | EQUAL
+                       | NAME of string
+                       | TEXT of string
+                       | CDATA of string
+                       | COMMENT of string
+
+        fun name t =
+            case t of ANGLE_L => "<"
+                    | ANGLE_R => ">"
+                    | ANGLE_SLASH_L => "</"
+                    | SLASH_ANGLE_R => "/>"
+                    | EQUAL => "="
+                    | NAME s => "name \"" ^ s ^ "\""
+                    | TEXT s => "text"
+                    | CDATA _ => "CDATA section"
+                    | COMMENT _ => "comment"
+    end
+
+    structure Lex :> sig
+                  val lex : string -> T.token list result
+              end = struct
+                      
+        fun error pos text =
+            ERROR (text ^ " at character position " ^ Int.toString (pos-1))
+        fun tokenError pos token =
+            error pos ("Unexpected token '" ^ Char.toString token ^ "'")
+
+        val nameEnd = explode " \t\n\r\"'</>!=?"
+                              
+        fun quoted quote pos acc cc =
+            let fun quoted' pos text [] =
+                    error pos "Document ends during quoted string"
+                  | quoted' pos text (x::xs) =
+                    if x = quote
+                    then OK (rev text, xs, pos+1)
+                    else quoted' (pos+1) (x::text) xs
+            in
+                case quoted' pos [] cc of
+                    ERROR e => ERROR e
+                  | OK (text, rest, newpos) =>
+                    inside newpos (T.TEXT (implode text) :: acc) rest
+            end
+
+        and name first pos acc cc =
+            let fun name' pos text [] =
+                    error pos "Document ends during name"
+                  | name' pos text (x::xs) =
+                    if List.find (fn c => c = x) nameEnd <> NONE
+                    then OK (rev text, (x::xs), pos)
+                    else name' (pos+1) (x::text) xs
+            in
+                case name' (pos-1) [] (first::cc) of
+                    ERROR e => ERROR e
+                  | OK ([], [], pos) => error pos "Document ends before name"
+                  | OK ([], (x::xs), pos) => tokenError pos x
+                  | OK (text, rest, pos) =>
+                    inside pos (T.NAME (implode text) :: acc) rest
+            end
+
+        and comment pos acc cc =
+            let fun comment' pos text cc =
+                    case cc of
+                        #"-" :: #"-" :: #">" :: xs => OK (rev text, xs, pos+3)
+                      | x :: xs => comment' (pos+1) (x::text) xs
+                      | [] => error pos "Document ends during comment"
+            in
+                case comment' pos [] cc of
+                    ERROR e => ERROR e
+                  | OK (text, rest, pos) => 
+                    outside pos (T.COMMENT (implode text) :: acc) rest
+            end
+
+        and instruction pos acc cc =
+            case cc of
+                #"?" :: #">" :: xs => outside (pos+2) acc xs
+              | #">" :: _ => tokenError pos #">"
+              | x :: xs => instruction (pos+1) acc xs
+              | [] => error pos "Document ends during processing instruction"
+
+        and cdata pos acc cc =
+            let fun cdata' pos text cc =
+                    case cc of
+                        #"]" :: #"]" :: #">" :: xs => OK (rev text, xs, pos+3)
+                      | x :: xs => cdata' (pos+1) (x::text) xs
+                      | [] => error pos "Document ends during CDATA section"
+            in
+                case cdata' pos [] cc of
+                    ERROR e => ERROR e
+                  | OK (text, rest, pos) =>
+                    outside pos (T.CDATA (implode text) :: acc) rest
+            end
+                
+        and doctype pos acc cc =
+            case cc of
+                #">" :: xs => outside (pos+1) acc xs
+              | x :: xs => doctype (pos+1) acc xs
+              | [] => error pos "Document ends during DOCTYPE"
+
+        and declaration pos acc cc =
+            case cc of
+                #"-" :: #"-" :: xs =>
+                comment (pos+2) acc xs
+              | #"[" :: #"C" :: #"D" :: #"A" :: #"T" :: #"A" :: #"[" :: xs =>
+                cdata (pos+7) acc xs
+              | #"D" :: #"O" :: #"C" :: #"T" :: #"Y" :: #"P" :: #"E" :: xs =>
+                doctype (pos+7) acc xs
+              | [] => error pos "Document ends during declaration"
+              | _ => error pos "Unsupported declaration type"
+
+        and left pos acc cc =
+            case cc of
+                #"/" :: xs => inside (pos+1) (T.ANGLE_SLASH_L :: acc) xs
+              | #"!" :: xs => declaration (pos+1) acc xs
+              | #"?" :: xs => instruction (pos+1) acc xs
+              | xs => inside pos (T.ANGLE_L :: acc) xs
+
+        and slash pos acc cc =
+            case cc of
+                #">" :: xs => outside (pos+1) (T.SLASH_ANGLE_R :: acc) xs
+              | x :: _ => tokenError pos x
+              | [] => error pos "Document ends before element closed"
+
+        and close pos acc xs = outside pos (T.ANGLE_R :: acc) xs
+
+        and equal pos acc xs = inside pos (T.EQUAL :: acc) xs
+
+        and outside pos acc [] = OK acc
+          | outside pos acc cc =
+            let fun textOf text = T.TEXT (implode (rev text))
+                fun outside' pos [] acc [] = OK acc
+                  | outside' pos text acc [] = OK (textOf text :: acc)
+                  | outside' pos text acc (x::xs) =
+                    case x of
+                        #"<" => if text = []
+                                then left (pos+1) acc xs
+                                else left (pos+1) (textOf text :: acc) xs
+                      | x => outside' (pos+1) (x::text) acc xs
+            in
+                outside' pos [] acc cc
+            end
+                
+        and inside pos acc [] = error pos "Document ends within tag"
+          | inside pos acc (#"<"::_) = tokenError pos #"<"
+          | inside pos acc (x::xs) =
+            (case x of
+                 #" " => inside | #"\t" => inside
+               | #"\n" => inside | #"\r" => inside
+               | #"\"" => quoted x | #"'" => quoted x
+               | #"/" => slash | #">" => close | #"=" => equal
+               | x => name x) (pos+1) acc xs
+
+        fun lex str =
+            case outside 1 [] (explode str) of
+                ERROR e => ERROR e
+              | OK tokens => OK (rev tokens)
+    end
+
+    structure Parse :> sig
+                  val parse : string -> document result
+              end = struct                            
+                  
+        fun show [] = "end of input"
+          | show (tok :: _) = T.name tok
+
+        fun error toks text = ERROR (text ^ " before " ^ show toks)
+
+        fun attribute elt name toks =
+            case toks of
+                T.EQUAL :: T.TEXT value :: xs =>
+                namedElement {
+                    name = #name elt,
+                    children = ATTRIBUTE { name = name, value = value } ::
+                               #children elt
+                } xs
+              | T.EQUAL :: xs => error xs "Expected attribute value"
+              | toks => error toks "Expected attribute assignment"
+
+        and content elt toks =
+            case toks of
+                T.ANGLE_SLASH_L :: T.NAME n :: T.ANGLE_R :: xs =>
+                if n = #name elt
+                then OK (elt, xs)
+                else ERROR ("Closing tag </" ^ n ^ "> " ^
+                            "does not match opening <" ^ #name elt ^ ">")
+              | T.TEXT text :: xs =>
+                content {
+                    name = #name elt,
+                    children = TEXT text :: #children elt
+                } xs
+              | T.CDATA text :: xs =>
+                content {
+                    name = #name elt,
+                    children = CDATA text :: #children elt
+                } xs
+              | T.COMMENT text :: xs =>
+                content {
+                    name = #name elt,
+                    children = COMMENT text :: #children elt
+                } xs
+              | T.ANGLE_L :: xs =>
+                (case element xs of
+                     ERROR e => ERROR e
+                   | OK (child, xs) =>
+                     content {
+                         name = #name elt,
+                         children = ELEMENT child :: #children elt
+                     } xs)
+              | tok :: xs =>
+                error xs ("Unexpected token " ^ T.name tok)
+              | [] =>
+                ERROR ("Document ends within element \"" ^ #name elt ^ "\"")
+                       
+        and namedElement elt toks =
+            case toks of
+                T.SLASH_ANGLE_R :: xs => OK (elt, xs)
+              | T.NAME name :: xs => attribute elt name xs
+              | T.ANGLE_R :: xs => content elt xs
+              | x :: xs => error xs ("Unexpected token " ^ T.name x)
+              | [] => ERROR "Document ends within opening tag"
+                       
+        and element toks =
+            case toks of
+                T.NAME name :: xs =>
+                (case namedElement { name = name, children = [] } xs of
+                     ERROR e => ERROR e 
+                   | OK ({ name, children }, xs) =>
+                     OK ({ name = name, children = rev children }, xs))
+              | toks => error toks "Expected element name"
+
+        and document [] = ERROR "Empty document"
+          | document (tok :: xs) =
+            case tok of
+                T.TEXT _ => document xs
+              | T.COMMENT _ => document xs
+              | T.ANGLE_L =>
+                (case element xs of
+                     ERROR e => ERROR e
+                   | OK (elt, []) => OK (DOCUMENT elt)
+                   | OK (elt, (T.TEXT _ :: xs)) => OK (DOCUMENT elt)
+                   | OK (elt, xs) => error xs "Extra data after document")
+              | _ => error xs ("Unexpected token " ^ T.name tok)
+
+        fun parse str =
+            case Lex.lex str of
+                ERROR e => ERROR e
+              | OK tokens => document tokens
+    end
+
+    structure Serialise :> sig
+                  val serialise : document -> string
+              end = struct
+
+        fun attributes nodes =
+            String.concatWith
+                " "
+                (map node (List.filter
+                               (fn ATTRIBUTE _ => true | _ => false)
+                               nodes))
+
+        and nonAttributes nodes =
+            String.concat
+                (map node (List.filter
+                               (fn ATTRIBUTE _ => false | _ => true)
+                               nodes))
+                
+        and node n =
+            case n of
+                TEXT string =>
+                string
+              | CDATA string =>
+                "<![CDATA[" ^ string ^ "]]>"
+              | COMMENT string =>
+                "<!-- " ^ string ^ "-->"
+              | ATTRIBUTE { name, value } =>
+                name ^ "=" ^ "\"" ^ value ^ "\"" (*!!!*)
+              | ELEMENT { name, children } =>
+                "<" ^ name ^
+                (case (attributes children) of
+                     "" => ""
+                   | s => " " ^ s) ^
+                (case (nonAttributes children) of
+                     "" => "/>"
+                   | s => ">" ^ s ^ "</" ^ name ^ ">")
+                              
+        fun serialise (DOCUMENT { name, children }) =
+            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ^
+            node (ELEMENT { name = name, children = children })
+    end
+
+    val parse = Parse.parse
+    val serialise = Serialise.serialise
+                        
+end
+
+
+structure SvnControl :> VCS_CONTROL = struct
+
+    val svn_program = "svn"
+
+    fun svn_command context libname args =
+        FileBits.command context libname (svn_program :: args)
+
+    fun svn_command_output context libname args =
+        FileBits.command_output context libname (svn_program :: args)
+
+    fun svn_command_lines context libname args =
+        case svn_command_output context libname args of
+            ERROR e => ERROR e
+          | OK s => OK (String.tokens (fn c => c = #"\n" orelse c = #"\r") s)
+
+    fun split_line_pair line =
+        let fun strip_leading_ws str = case explode str of
+                                           #" "::rest => implode rest
+                                         | _ => str
+        in
+            case String.tokens (fn c => c = #":") line of
+                [] => ("", "")
+              | first::rest =>
+                (first, strip_leading_ws (String.concatWith ":" rest))
+        end
+
+    fun is_working context =
+        case svn_command_output context "" ["--version"] of
+            OK "" => OK false
+          | OK _ => OK true
+          | ERROR e => ERROR e
+
+    structure X = SubXml
+                      
+    fun svn_info context libname route =
+        (* SVN 1.9 has info --show-item which is just what we need,
+           but at this point we still have 1.8 on the CI boxes so we
+           might as well aim to support it. For that we really have to
+           use the XML output format, since the default info output is
+           localised. This is the only thing our mini-XML parser is
+           used for though, so it would be good to trim it at some
+           point *)
+        let fun find elt [] = OK elt
+              | find { children, ... } (first :: rest) =
+                case List.find (fn (X.ELEMENT { name, ... }) => name = first
+                               | _ => false)
+                               children of
+                    NONE => ERROR ("No element \"" ^ first ^ "\" in SVN XML")
+                  | SOME (X.ELEMENT e) => find e rest
+                  | SOME _ => ERROR "Internal error"
+        in
+            case svn_command_output context libname ["info", "--xml"] of
+                ERROR e => ERROR e
+              | OK xml =>
+                case X.parse xml of
+                    X.ERROR e => ERROR e
+                  | X.OK (X.DOCUMENT doc) => find doc route
+        end
+            
+    fun exists context libname =
+        OK (OS.FileSys.isDir (FileBits.subpath context libname ".svn"))
+        handle _ => OK false
+
+    fun remote_for context (libname, source) =
+        Provider.remote_url context SVN source libname
+
+    (* Remote the checkout came from, not necessarily the one we want *)
+    fun actual_remote_for context libname =
+        case svn_info context libname ["entry", "url"] of
+            ERROR e => ERROR e
+          | OK { children, ... } =>
+            case List.find (fn (X.TEXT _) => true | _ => false) children of
+                NONE => ERROR "No content for URL in SVN info XML"
+              | SOME (X.TEXT url) => OK url
+              | SOME _ => ERROR "Internal error"
+
+    fun id_of context libname =
+        case svn_info context libname ["entry"] of
+            ERROR e => ERROR e
+          | OK { children, ... } => 
+            case List.find
+                     (fn (X.ATTRIBUTE { name = "revision", ... }) => true
+                     | _ => false)
+                     children of
+                NONE => ERROR "No revision for entry in SVN info XML"
+              | SOME (X.ATTRIBUTE { value, ... }) => OK value
+              | SOME _ => ERROR "Internal error"
+
+    fun is_at context (libname, id_or_tag) =
+        case id_of context libname of
+            ERROR e => ERROR e
+          | OK id => OK (id = id_or_tag)
+
+    fun is_on_branch context (libname, b) =
+        OK (b = DEFAULT_BRANCH)
+
+    fun check_remote context (libname, source) =
+      case (remote_for context (libname, source),
+            actual_remote_for context libname) of
+          (_, ERROR e) => ERROR e
+        | (url, OK actual) => 
+          if actual = url
+          then OK ()
+          else svn_command context libname ["relocate", url]
+               
+    fun is_newest context (libname, source, branch) =
+        case check_remote context (libname, source) of
+            ERROR e => ERROR e
+          | OK () => 
+            case svn_command_lines context libname
+                                   ["status", "--show-updates"] of
+                ERROR e => ERROR e
+              | OK lines =>
+                case rev lines of
+                    [] => ERROR "No result returned for server status"
+                  | last_line::_ =>
+                    case rev (String.tokens (fn c => c = #" ") last_line) of
+                        [] => ERROR "No revision field found in server status"
+                      | server_id::_ => is_at context (libname, server_id)
+
+    fun is_newest_locally context (libname, branch) =
+        OK true (* no local history *)
+
+    fun is_modified_locally context libname =
+        case svn_command_output context libname ["status"] of
+            ERROR e => ERROR e
+          | OK "" => OK false
+          | OK _ => OK true
+
+    fun checkout context (libname, source, branch) =
+        let val url = remote_for context (libname, source)
+            val path = FileBits.libpath context libname
+        in
+            if FileBits.nonempty_dir_exists path
+            then (* Surprisingly, SVN itself has no problem with
+                    this. But for consistency with other VCSes we 
+                    don't allow it *)
+                ERROR ("Refusing checkout to nonempty dir \"" ^ path ^ "\"")
+            else 
+                (* make the lib dir rather than just the ext dir, since
+                   the lib dir might be nested and svn will happily check
+                   out into an existing empty dir anyway *)
+                case FileBits.mkpath (FileBits.libpath context libname) of
+                    ERROR e => ERROR e
+                  | _ => svn_command context "" ["checkout", url, libname]
+        end
+                                                    
+    fun update context (libname, source, branch) =
+        case check_remote context (libname, source) of
+            ERROR e => ERROR e
+          | OK () => 
+            case svn_command context libname
+                             ["update", "--accept", "postpone"] of
+                ERROR e => ERROR e
+              | _ => OK ()
+
+    fun update_to context (libname, _, "") =
+        ERROR "Non-empty id (tag or revision id) required for update_to"
+      | update_to context (libname, source, id) = 
+        case check_remote context (libname, source) of
+            ERROR e => ERROR e
+          | OK () => 
+            case svn_command context libname
+                             ["update", "-r", id, "--accept", "postpone"] of
+                ERROR e => ERROR e
+              | OK _ => OK ()
+
+    fun copy_url_for context libname =
+        actual_remote_for context libname
+
+end
+
+structure AnyLibControl :> LIB_CONTROL = struct
+
+    structure H = LibControlFn(HgControl)
+    structure G = LibControlFn(GitControl)
+    structure S = LibControlFn(SvnControl)
+
+    fun review context (spec as { vcs, ... } : libspec) =
+        (fn HG => H.review | GIT => G.review | SVN => S.review) vcs context spec
+
+    fun status context (spec as { vcs, ... } : libspec) =
+        (fn HG => H.status | GIT => G.status | SVN => S.status) vcs context spec
+
+    fun update context (spec as { vcs, ... } : libspec) =
+        (fn HG => H.update | GIT => G.update | SVN => S.update) vcs context spec
+
+    fun id_of context (spec as { vcs, ... } : libspec) =
+        (fn HG => H.id_of | GIT => G.id_of | SVN => S.id_of) vcs context spec
+
+    fun is_working context vcs =
+        (fn HG => H.is_working | GIT => G.is_working | SVN => S.is_working)
+            vcs context vcs
+
+end
+
+
+type exclusions = string list
+              
+structure Archive :> sig
+
+    val archive : string * exclusions -> project -> OS.Process.status
+        
+end = struct
+
+    (* The idea of "archive" is to replace hg/git archive, which won't
+       include files, like the Repoint-introduced external libraries,
+       that are not under version control with the main repo.
+
+       The process goes like this:
+
+       - Make sure we have a target filename from the user, and take
+         its basename as our archive directory name
+
+       - Make an "archive root" subdir of the project repo, named
+         typically .repoint-archive
+       
+       - Identify the VCS used for the project repo. Note that any
+         explicit references to VCS type in this structure are to
+         the VCS used for the project (something Repoint doesn't 
+         otherwise care about), not for an individual library
+
+       - Synthesise a Repoint project with the archive root as its
+         root path, "." as its extdir, with one library whose
+         name is the user-supplied basename and whose explicit
+         source URL is the original project root; update that
+         project -- thus cloning the original project to a subdir
+         of the archive root
+
+       - Synthesise a Repoint project identical to the original one for
+         this project, but with the newly-cloned copy as its root
+         path; update that project -- thus checking out clean copies
+         of the external library dirs
+
+       - Call out to an archive program to archive up the new copy,
+         running e.g.
+         tar cvzf project-release.tar.gz \
+             --exclude=.hg --exclude=.git project-release
+         in the archive root dir
+
+       - (We also omit the repoint-project.json file and any trace of
+         Repoint. It can't properly be run in a directory where the
+         external project folders already exist but their repo history
+         does not. End users shouldn't get to see Repoint)
+
+       - Clean up by deleting the new copy
+    *)
+
+    fun project_vcs_id_and_url dir =
+        let val context = {
+                rootpath = dir,
+                extdir = ".",
+                providers = [],
+                accounts = []
+            }
+            val vcs_maybe = 
+                case [HgControl.exists context ".",
+                      GitControl.exists context ".",
+                      SvnControl.exists context "."] of
+                    [OK true, OK false, OK false] => OK HG
+                  | [OK false, OK true, OK false] => OK GIT
+                  | [OK false, OK false, OK true] => OK SVN
+                  | _ => ERROR ("Unable to identify VCS for directory " ^ dir)
+        in
+            case vcs_maybe of
+                ERROR e => ERROR e
+              | OK vcs =>
+                case (fn HG => HgControl.id_of
+                       | GIT => GitControl.id_of 
+                       | SVN => SvnControl.id_of)
+                         vcs context "." of
+                    ERROR e => ERROR ("Unable to find id of project repo: " ^ e)
+                  | OK id =>
+                    case (fn HG => HgControl.copy_url_for
+                           | GIT => GitControl.copy_url_for
+                           | SVN => SvnControl.copy_url_for)
+                             vcs context "." of
+                        ERROR e => ERROR ("Unable to find URL of project repo: "
+                                          ^ e)
+                      | OK url => OK (vcs, id, url)
+        end
+            
+    fun make_archive_root (context : context) =
+        let val path = OS.Path.joinDirFile {
+                    dir = #rootpath context,
+                    file = RepointFilenames.archive_dir
+                }
+        in
+            case FileBits.mkpath path of
+                ERROR e => raise Fail ("Failed to create archive directory \""
+                                       ^ path ^ "\": " ^ e)
+              | OK () => path
+        end
+
+    fun archive_path archive_dir target_name =
+        OS.Path.joinDirFile {
+            dir = archive_dir,
+            file = target_name
+        }
+
+    fun check_nonexistent path =
+        case SOME (OS.FileSys.fileSize path) handle OS.SysErr _ => NONE of
+            NONE => ()
+          | _ => raise Fail ("Path " ^ path ^ " exists, not overwriting")
+            
+    fun make_archive_copy target_name (vcs, project_id, source_url)
+                          ({ context, ... } : project) =
+        let val archive_root = make_archive_root context
+            val synthetic_context = {
+                rootpath = archive_root,
+                extdir = ".",
+                providers = [],
+                accounts = []
+            }
+            val synthetic_library = {
+                libname = target_name,
+                vcs = vcs,
+                source = URL_SOURCE source_url,
+                branch = DEFAULT_BRANCH, (* overridden by pinned id below *)
+                project_pin = PINNED project_id,
+                lock_pin = PINNED project_id
+            }
+            val path = archive_path archive_root target_name
+            val _ = print ("Cloning original project to " ^ path
+                           ^ " at revision " ^ project_id ^ "...\n");
+            val _ = check_nonexistent path
+        in
+            case AnyLibControl.update synthetic_context synthetic_library of
+                ERROR e => ERROR ("Failed to clone original project to "
+                                  ^ path ^ ": " ^ e)
+              | OK _ => OK archive_root
+        end
+
+    fun update_archive archive_root target_name
+                       (project as { context, ... } : project) =
+        let val synthetic_context = {
+                rootpath = archive_path archive_root target_name,
+                extdir = #extdir context,
+                providers = #providers context,
+                accounts = #accounts context
+            }
+        in
+            foldl (fn (lib, acc) =>
+                      case acc of
+                          ERROR e => ERROR e
+                        | OK () => AnyLibControl.update synthetic_context lib)
+                  (OK ())
+                  (#libs project)
+        end
+
+    datatype packer = TAR
+                    | TAR_GZ
+                    | TAR_BZ2
+                    | TAR_XZ
+    (* could add other packers, e.g. zip, if we knew how to
+       handle the file omissions etc properly in pack_archive *)
+                          
+    fun packer_and_basename path =
+        let val extensions = [ (".tar", TAR),
+                               (".tar.gz", TAR_GZ),
+                               (".tar.bz2", TAR_BZ2),
+                               (".tar.xz", TAR_XZ)]
+            val filename = OS.Path.file path
+        in
+            foldl (fn ((ext, packer), acc) =>
+                      if String.isSuffix ext filename
+                      then SOME (packer,
+                                 String.substring (filename, 0,
+                                                   String.size filename -
+                                                   String.size ext))
+                      else acc)
+                  NONE
+                  extensions
+        end
+            
+    fun pack_archive archive_root target_name target_path packer exclusions =
+        case FileBits.command {
+                rootpath = archive_root,
+                extdir = ".",
+                providers = [],
+                accounts = []
+            } "" ([
+                     "tar",
+                     case packer of
+                         TAR => "cf"
+                       | TAR_GZ => "czf"
+                       | TAR_BZ2 => "cjf"
+                       | TAR_XZ => "cJf",
+                     target_path,
+                     "--exclude=.hg",
+                     "--exclude=.git",
+                     "--exclude=.svn",
+                     "--exclude=repoint",
+                     "--exclude=repoint.sml",
+                     "--exclude=repoint.ps1",
+                     "--exclude=repoint.bat",
+                     "--exclude=repoint-project.json",
+                     "--exclude=repoint-lock.json"
+                 ] @ (map (fn e => "--exclude=" ^ e) exclusions) @
+                  [ target_name ])
+         of
+            ERROR e => ERROR e
+          | OK _ => FileBits.rmpath (archive_path archive_root target_name)
+            
+    fun archive (target_path, exclusions) (project : project) =
+        let val _ = check_nonexistent target_path
+            val (packer, name) =
+                case packer_and_basename target_path of
+                    NONE => raise Fail ("Unsupported archive file extension in "
+                                        ^ target_path)
+                  | SOME pn => pn
+            val details =
+                case project_vcs_id_and_url (#rootpath (#context project)) of
+                    ERROR e => raise Fail e
+                  | OK details => details
+            val archive_root =
+                case make_archive_copy name details project of
+                    ERROR e => raise Fail e
+                  | OK archive_root => archive_root
+            val outcome = 
+                case update_archive archive_root name project of
+                    ERROR e => ERROR e
+                  | OK _ =>
+                    case pack_archive archive_root name
+                                      target_path packer exclusions of
+                        ERROR e => ERROR e
+                      | OK _ => OK ()
+        in
+            case outcome of
+                ERROR e => raise Fail e
+              | OK () => OS.Process.success
+        end
+            
+end
+
+val libobjname = "libraries"
+                                             
+fun load_libspec spec_json lock_json libname : libspec =
+    let open JsonBits
+        val libobj   = lookup_mandatory spec_json [libobjname, libname]
+        val vcs      = lookup_mandatory_string libobj ["vcs"]
+        val retrieve = lookup_optional_string libobj
+        val service  = retrieve ["service"]
+        val owner    = retrieve ["owner"]
+        val repo     = retrieve ["repository"]
+        val url      = retrieve ["url"]
+        val branch   = retrieve ["branch"]
+        val project_pin = case retrieve ["pin"] of
+                              NONE => UNPINNED
+                            | SOME p => PINNED p
+        val lock_pin = case lookup_optional lock_json [libobjname, libname] of
+                           NONE => UNPINNED
+                         | SOME ll => case lookup_optional_string ll ["pin"] of
+                                          SOME p => PINNED p
+                                        | NONE => UNPINNED
+    in
+        {
+          libname = libname,
+          vcs = case vcs of
+                    "hg" => HG
+                  | "git" => GIT
+                  | "svn" => SVN
+                  | other => raise Fail ("Unknown version-control system \"" ^
+                                         other ^ "\""),
+          source = case (url, service, owner, repo) of
+                       (SOME u, NONE, _, _) => URL_SOURCE u
+                     | (NONE, SOME ss, owner, repo) =>
+                       SERVICE_SOURCE { service = ss, owner = owner, repo = repo }
+                     | _ => raise Fail ("Must have exactly one of service " ^
+                                        "or url string"),
+          project_pin = project_pin,
+          lock_pin = lock_pin,
+          branch = case branch of
+                       NONE => DEFAULT_BRANCH
+                     | SOME b => 
+                       case vcs of
+                           "svn" => raise Fail ("Branches not supported for " ^
+                                                "svn repositories; change " ^
+                                                "URL instead")
+                         | _ => BRANCH b
+        }
+    end  
+
+fun load_userconfig () : userconfig =
+    let val home = FileBits.homedir ()
+        val conf_json = 
+            JsonBits.load_json_from
+                (OS.Path.joinDirFile {
+                      dir = home,
+                      file = RepointFilenames.user_config_file })
+            handle IO.Io _ => Json.OBJECT []
+    in
+        {
+          accounts = case JsonBits.lookup_optional conf_json ["accounts"] of
+                         NONE => []
+                       | SOME (Json.OBJECT aa) =>
+                         map (fn (k, (Json.STRING v)) =>
+                                 { service = k, login = v }
+                             | _ => raise Fail
+                                          "String expected for account name")
+                             aa
+                       | _ => raise Fail "Array expected for accounts",
+          providers = Provider.load_providers conf_json
+        }
+    end
+
+datatype pintype =
+         NO_LOCKFILE |
+         USE_LOCKFILE
+        
+fun load_project (userconfig : userconfig) rootpath pintype : project =
+    let val spec_file = FileBits.project_spec_path rootpath
+        val lock_file = FileBits.project_lock_path rootpath
+        val _ = if OS.FileSys.access (spec_file, [OS.FileSys.A_READ])
+                   handle OS.SysErr _ => false
+                then ()
+                else raise Fail ("Failed to open project spec file " ^
+                                 (RepointFilenames.project_file) ^ " in " ^
+                                 rootpath ^
+                                 ".\nPlease ensure the spec file is in the " ^
+                                 "project root and run this from there.")
+        val spec_json = JsonBits.load_json_from spec_file
+        val lock_json = if pintype = USE_LOCKFILE
+                        then JsonBits.load_json_from lock_file
+                             handle IO.Io _ => Json.OBJECT []
+                        else Json.OBJECT []
+        val extdir = JsonBits.lookup_mandatory_string spec_json
+                                                      ["config", "extdir"]
+        val spec_libs = JsonBits.lookup_optional spec_json [libobjname]
+        val lock_libs = JsonBits.lookup_optional lock_json [libobjname]
+        val providers = Provider.load_more_providers
+                            (#providers userconfig) spec_json
+        val libnames = case spec_libs of
+                           NONE => []
+                         | SOME (Json.OBJECT ll) => map (fn (k, v) => k) ll
+                         | _ => raise Fail "Object expected for libs"
+    in
+        {
+          context = {
+            rootpath = rootpath,
+            extdir = extdir,
+            providers = providers,
+            accounts = #accounts userconfig
+          },
+          libs = map (load_libspec spec_json lock_json) libnames
+        }
+    end
+
+fun save_lock_file rootpath locks =
+    let val lock_file = FileBits.project_lock_path rootpath
+        open Json
+        val lock_json =
+            OBJECT [
+                (libobjname,
+                 OBJECT (map (fn { libname, id_or_tag } =>
+                                 (libname,
+                                  OBJECT [ ("pin", STRING id_or_tag) ]))
+                             locks))
+            ]
+    in
+        JsonBits.save_json_to lock_file lock_json
+    end
+
+fun checkpoint_completion_file rootpath =
+    let val completion_file = FileBits.project_completion_path rootpath
+        val stream = TextIO.openOut completion_file
+    in
+        TextIO.closeOut stream
+    end
+                                                               
+fun pad_to n str =
+    if n <= String.size str then str
+    else pad_to n (str ^ " ")
+
+fun hline_to 0 = ""
+  | hline_to n = "-" ^ hline_to (n-1)
+
+val libname_width = 28
+val libstate_width = 11
+val localstate_width = 17
+val notes_width = 5
+val divider = " | "
+val clear_line = "\r" ^ pad_to 80 "";
+
+fun print_status_header () =
+    print (clear_line ^ "\n " ^
+           pad_to libname_width "Library" ^ divider ^
+           pad_to libstate_width "State" ^ divider ^
+           pad_to localstate_width "Local" ^ divider ^
+           "Notes" ^ "\n " ^
+           hline_to libname_width ^ "-+-" ^
+           hline_to libstate_width ^ "-+-" ^
+           hline_to localstate_width ^ "-+-" ^
+           hline_to notes_width ^ "\n")
+
+fun print_outcome_header () =
+    print (clear_line ^ "\n " ^
+           pad_to libname_width "Library" ^ divider ^
+           pad_to libstate_width "Outcome" ^ divider ^
+           "Notes" ^ "\n " ^
+           hline_to libname_width ^ "-+-" ^
+           hline_to libstate_width ^ "-+-" ^
+           hline_to notes_width ^ "\n")
+                        
+fun print_status with_network (lib : libspec, status) =
+    let val libstate_str =
+            case status of
+                OK (ABSENT, _) => "Absent"
+              | OK (CORRECT, _) => if with_network then "Correct" else "Present"
+              | OK (SUPERSEDED, _) => "Superseded"
+              | OK (WRONG, _) => "Wrong"
+              | ERROR _ => "Error"
+        val localstate_str =
+            case status of
+                OK (_, MODIFIED) => "Modified"
+              | OK (_, LOCK_MISMATCHED) => "Differs from Lock"
+              | OK (_, CLEAN) => "Clean"
+              | ERROR _ => ""
+        val error_str =
+            case status of
+                ERROR e => e
+              | _ => ""
+    in
+        print (" " ^
+               pad_to libname_width (#libname lib) ^ divider ^
+               pad_to libstate_width libstate_str ^ divider ^
+               pad_to localstate_width localstate_str ^ divider ^
+               error_str ^ "\n")
+    end
+
+fun print_update_outcome (lib : libspec, outcome) =
+    let val outcome_str =
+            case outcome of
+                OK id => "Ok"
+              | ERROR e => "Failed"
+        val error_str =
+            case outcome of
+                ERROR e => e
+              | _ => ""
+    in
+        print (" " ^
+               pad_to libname_width (#libname lib) ^ divider ^
+               pad_to libstate_width outcome_str ^ divider ^
+               error_str ^ "\n")
+    end
+
+fun vcs_name HG = ("Mercurial", "hg")
+  | vcs_name GIT = ("Git", "git")
+  | vcs_name SVN = ("Subversion", "svn")
+        
+fun print_problem_summary context lines =
+    let val failed_vcs =
+            foldl (fn (({ vcs, ... } : libspec, ERROR _), acc) => vcs::acc
+                  | (_, acc) => acc) [] lines
+        fun report_nonworking vcs error =
+            print ((if error = "" then "" else error ^ "\n\n") ^
+                   "Error: The project uses the " ^ (#1 (vcs_name vcs)) ^
+                   " version control system, but its\n" ^
+                   "executable program (" ^ (#2 (vcs_name vcs)) ^
+                   ") does not appear to be installed in the program path\n\n")
+        fun check_working [] checked = ()
+          | check_working (vcs::rest) checked =
+            if List.exists (fn v => vcs = v) checked
+            then check_working rest checked
+            else
+                case AnyLibControl.is_working context vcs of
+                    OK true => check_working rest checked
+                  | OK false => (report_nonworking vcs "";
+                                 check_working rest (vcs::checked))
+                  | ERROR e => (report_nonworking vcs e;
+                                check_working rest (vcs::checked))
+    in
+        print "\nError: Some operations failed\n\n";
+        check_working failed_vcs []
+    end
+        
+fun act_and_print action print_header print_line context (libs : libspec list) =
+    let val lines = map (fn lib => (lib, action lib)) libs
+        val imperfect = List.exists (fn (_, ERROR _) => true | _ => false) lines
+        val _ = print_header ()
+    in
+        app print_line lines;
+        if imperfect then print_problem_summary context lines else ();
+        lines
+    end
+
+fun return_code_for outcomes =
+    foldl (fn ((_, result), acc) =>
+              case result of
+                  ERROR _ => OS.Process.failure
+                | _ => acc)
+          OS.Process.success
+          outcomes
+        
+fun status_of_project ({ context, libs } : project) =
+    return_code_for (act_and_print (AnyLibControl.status context)
+                                   print_status_header (print_status false)
+                                   context libs)
+                                             
+fun review_project ({ context, libs } : project) =
+    return_code_for (act_and_print (AnyLibControl.review context)
+                                   print_status_header (print_status true)
+                                   context libs)
+
+fun lock_project ({ context, libs } : project) =
+    let val _ = if FileBits.verbose ()
+                then print ("Scanning IDs for lock file...\n")
+                else ()
+        val outcomes = map (fn lib => (lib, AnyLibControl.id_of context lib))
+                           libs
+        val locks =
+            List.concat
+                (map (fn (lib : libspec, result) =>
+                         case result of
+                             ERROR _ => []
+                           | OK id => [{ libname = #libname lib,
+                                         id_or_tag = id }])
+                     outcomes)
+        val return_code = return_code_for outcomes
+        val _ = print clear_line
+    in
+        if OS.Process.isSuccess return_code
+        then save_lock_file (#rootpath context) locks
+        else ();
+        return_code
+    end
+
+fun update_project (project as { context, libs }) =
+    let val outcomes = act_and_print
+                           (AnyLibControl.update context)
+                           print_outcome_header print_update_outcome
+                           context libs
+        val _ = if List.exists (fn (_, OK _) => true | _ => false) outcomes
+                then lock_project project
+                else OS.Process.success
+        val return_code = return_code_for outcomes
+    in
+        if OS.Process.isSuccess return_code
+        then checkpoint_completion_file (#rootpath context)
+        else ();
+        return_code
+    end
+    
+fun load_local_project pintype =
+    let val userconfig = load_userconfig ()
+        val rootpath = OS.FileSys.getDir ()
+    in
+        load_project userconfig rootpath pintype
+    end    
+
+fun with_local_project pintype f =
+  let open OS.Process
+      val return_code =
+          f (load_local_project pintype)
+          handle Fail msg =>
+                 failure before print ("Error: " ^ msg)
+               | JsonBits.Config msg =>
+                 failure before print ("Error in configuration: " ^ msg)
+               | e =>
+                 failure before print ("Error: " ^ exnMessage e)
+        val _ = print "\n";
+    in
+        return_code
+    end
+        
+fun review () = with_local_project USE_LOCKFILE review_project
+fun status () = with_local_project USE_LOCKFILE status_of_project
+fun update () = with_local_project NO_LOCKFILE update_project
+fun lock () = with_local_project NO_LOCKFILE lock_project
+fun install () = with_local_project USE_LOCKFILE update_project
+
+fun version () =
+    (print ("v" ^ repoint_version ^ "\n");
+     OS.Process.success)
+                      
+fun usage () =
+    (print "\nRepoint ";
+     version ();
+     print ("\n  A simple manager for third-party source code dependencies.\n"
+            ^ "  http://all-day-breakfast.com/repoint/\n\n"
+            ^ "Usage:\n\n"
+            ^ "  repoint <command> [<options>]\n\n"
+            ^ "where <command> is one of:\n\n"
+            ^ "  status   print quick report on local status only, without using network\n"
+            ^ "  review   check configured libraries against their providers, and report\n"
+            ^ "  install  update configured libraries according to project specs and lock file\n"
+            ^ "  update   update configured libraries and lock file according to project specs\n"
+            ^ "  lock     rewrite lock file to match local library status\n"
+            ^ "  archive  pack up project and all libraries into an archive file:\n"
+            ^ "           invoke as 'repoint archive targetfile.tar.gz --exclude unwanted.txt'\n"
+            ^ "  version  print the Repoint version number and exit\n\n"
+            ^ "and <options> may include:\n\n"
+            ^ "  --directory <dir>\n"
+            ^ "           change to directory <dir> before doing anything; in particular,\n"
+            ^ "           expect to find project spec file in that directory\n\n");
+    OS.Process.failure)
+
+fun archive target args =
+    case args of
+        [] =>
+        with_local_project USE_LOCKFILE (Archive.archive (target, []))
+      | "--exclude"::xs =>
+        with_local_project USE_LOCKFILE (Archive.archive (target, xs))
+      | _ => usage ()
+
+fun handleSystemArgs args =
+    let fun handleSystemArgs' leftover args =
+            case args of
+                "--directory"::dir::rest =>
+                (OS.FileSys.chDir dir;
+                 handleSystemArgs' leftover rest)
+              | arg::rest =>
+                handleSystemArgs' (leftover @ [arg]) rest
+              | [] => leftover
+    in
+        OK (handleSystemArgs' [] args)
+        handle e => ERROR (exnMessage e)
+    end
+                   
+fun repoint args =
+    case handleSystemArgs args of
+        ERROR e => (print ("Error: " ^ e ^ "\n");
+                    OS.Process.exit OS.Process.failure)
+      | OK args => 
+        let val return_code = 
+            case args of
+                ["review"] => review ()
+              | ["status"] => status ()
+              | ["install"] => install ()
+              | ["update"] => update ()
+              | ["lock"] => lock ()
+              | ["version"] => version ()
+              | "archive"::target::args => archive target args
+              | arg::_ => (print ("Error: unknown argument \"" ^ arg ^ "\"\n");
+                           usage ())
+              | _ => usage ()
+        in
+            OS.Process.exit return_code
+        end
+        
+fun main () =
+    repoint (CommandLine.arguments ())
--- a/server.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/server.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -1,8 +1,7 @@
 
 TEMPLATE = app
 
-CONFIG += stl c++11 exceptions console warn_on
-
+CONFIG += stl exceptions console warn_on
 CONFIG -= qt
 
 exists(config.pri) {
@@ -31,7 +30,7 @@
 OBJECTS_DIR = o
 MOC_DIR = o
 
-INCLUDEPATH += piper-cpp vamp-plugin-sdk
+INCLUDEPATH += piper-cpp piper-cpp/ext vamp-plugin-sdk
 
 include(vamp-plugin-sdk-files.pri)
 
@@ -44,5 +43,5 @@
 
 SOURCES += \
         piper-cpp/vamp-capnp/piper-capnp.cpp \
-        piper-cpp/json11/json11.cpp \
+        piper-cpp/ext/json11/json11.cpp \
         piper-cpp/vamp-server/simple-server.cpp
--- a/sonic-visualiser.desktop	Mon Sep 17 13:53:25 2018 +0100
+++ b/sonic-visualiser.desktop	Mon Sep 17 14:05:41 2018 +0100
@@ -1,9 +1,11 @@
 [Desktop Entry]
 Name=Sonic Visualiser
+Comment=Viewing and analysing the contents of music audio files
+Comment[fr]=Affichage et analyse des contenus des fichiers audio de musique
 Exec=sonic-visualiser %U
 Keywords=audio; sound; visualiser; sonic;
 Terminal=false
 Type=Application
-Icon=sv-icon
+Icon=sonic-visualiser
 Categories=Audio;AudioVideo;
 MimeType=application/x-sonicvisualiser;application/x-sonicvisualiser-layer;application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/x-flac;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-wav;audio/wav;application/ogg;audio/x-vorbis+ogg;
--- a/sonic-visualiser.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/sonic-visualiser.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -1,15 +1,18 @@
 
 TEMPLATE = subdirs
 
-!win* {
-    # We should build and run the tests on any platform,
-    # but doing it automatically doesn't work so well from
-    # within an IDE on Windows, so remove that from here
-    SUBDIRS += \
-	sub_test_svcore_base \
+SUBDIRS += \
+        sub_base
+
+# We build the tests on every platform, though at the time of
+# writing they are only automatically run on non-Windows platforms
+# (because of the difficulty of getting them running nicely in the
+# IDE without causing great confusion if a test fails).
+SUBDIRS += \
+        sub_test_svcore_base \
+        sub_test_svcore_system \
         sub_test_svcore_data_fileio \
         sub_test_svcore_data_model
-}
 
 SUBDIRS += \
 	checker \
@@ -17,7 +20,10 @@
         sub_convert \
 	sub_sv
 
+sub_base.file = base.pro
+        
 sub_test_svcore_base.file = test-svcore-base.pro
+sub_test_svcore_system.file = test-svcore-system.pro
 sub_test_svcore_data_fileio.file = test-svcore-data-fileio.pro
 sub_test_svcore_data_model.file = test-svcore-data-model.pro
 
--- a/sonic-visualiser.qrc	Mon Sep 17 13:53:25 2018 +0100
+++ b/sonic-visualiser.qrc	Mon Sep 17 14:05:41 2018 +0100
@@ -3,134 +3,84 @@
     <file>icons/scalable/align.svg</file>
     <file>icons/scalable/colour3d.svg</file>
     <file>icons/scalable/cross.svg</file>
+    <file>icons/scalable/datadelete.svg</file>
     <file>icons/scalable/dataedit.svg</file>
+    <file>icons/scalable/down.svg</file>
     <file>icons/scalable/draw.svg</file>
-    <file>icons/scalable/erase.svg</file>
     <file>icons/scalable/editcopy.svg</file>
     <file>icons/scalable/editcut.svg</file>
     <file>icons/scalable/editdelete.svg</file>
     <file>icons/scalable/editpaste.svg</file>
+    <file>icons/scalable/erase.svg</file>
     <file>icons/scalable/exit.svg</file>
+    <file>icons/scalable/faders.svg</file>
     <file>icons/scalable/filenew.svg</file>
     <file>icons/scalable/fileopen.svg</file>
+    <file>icons/scalable/filesave.svg</file>
     <file>icons/scalable/filesaveas.svg</file>
-    <file>icons/scalable/filesave.svg</file>
     <file>icons/scalable/filesavesv.svg</file>
+    <file>icons/scalable/ffwd.svg</file>
     <file>icons/scalable/ffwd-end.svg</file>
-    <file>icons/scalable/ffwd.svg</file>
+    <file>icons/scalable/help.svg</file>
+    <file>icons/scalable/info.svg</file>
+    <file>icons/scalable/instants.svg</file>
+    <file>icons/scalable/measure.svg</file>
+    <file>icons/scalable/move.svg</file>
     <file>icons/scalable/navigate.svg</file>
-    <file>icons/scalable/move.svg</file>
+    <file>icons/scalable/normalise.svg</file>
+    <file>icons/scalable/normalise-columns.svg</file>
+    <file>icons/scalable/notes.svg</file>
+    <file>icons/scalable/pane.svg</file>
     <file>icons/scalable/pause.svg</file>
     <file>icons/scalable/playloop.svg</file>
     <file>icons/scalable/playpause.svg</file>
     <file>icons/scalable/playselection.svg</file>
-    <file>icons/scalable/solo.svg</file>
+    <file>icons/scalable/playfollow.svg</file>
     <file>icons/scalable/play.svg</file>
+    <file>icons/scalable/plus.svg</file>
     <file>icons/scalable/record.svg</file>
+    <file>icons/scalable/redo.svg</file>
+    <file>icons/scalable/regions.svg</file>
     <file>icons/scalable/rewind-start.svg</file>
     <file>icons/scalable/rewind.svg</file>
-    <file>icons/scalable/undo.svg</file>
-    <file>icons/scalable/redo.svg</file>
     <file>icons/scalable/select.svg</file>
-    <file>icons/scalable/measure.svg</file>
+    <file>icons/scalable/show-peaks.svg</file>
+    <file>icons/scalable/solo.svg</file>
     <file>icons/scalable/speaker.svg</file>
-    <file>icons/scalable/instants.svg</file>
-    <file>icons/scalable/notes.svg</file>
-    <file>icons/scalable/values.svg</file>
-    <file>icons/scalable/regions.svg</file>
     <file>icons/scalable/spectrogram.svg</file>
     <file>icons/scalable/spectrum.svg</file>
     <file>icons/scalable/text.svg</file>
     <file>icons/scalable/timeruler.svg</file>
+    <file>icons/scalable/undo.svg</file>
+    <file>icons/scalable/up.svg</file>
+    <file>icons/scalable/values.svg</file>
+    <file>icons/scalable/waveform.svg</file>
     <file>icons/scalable/zoom.svg</file>
     <file>icons/scalable/zoom-in.svg</file>
     <file>icons/scalable/zoom-out.svg</file>
     <file>icons/scalable/zoom-fit.svg</file>
+    <file>icons/scalable/zoom-reset.svg</file>
     <file>icons/scalable/sv-icon-light.svg</file>
     <file>icons/scalable/sv-icon.svg</file>
     <file>icons/scalable/sv-splash.svg</file>
     <file>icons/scalable/sv-splash.png</file>
     <file>icons/scalable/sv-splash@2x.png</file>
-    <file>icons/scalable/waveform.svg</file>
-    <file>icons/waveform.png</file>
-    <file>icons/spectrum.png</file>
-    <file>icons/spectrogram.png</file>
-    <file>icons/pane.png</file>
-    <file>icons/instants.png</file>
-    <file>icons/notes.png</file>
+
     <file>icons/image.png</file>
-    <file>icons/values.png</file>
-    <file>icons/regions.png</file>
-    <file>icons/colour3d.png</file>
-    <file>icons/playpause.png</file>
-    <file>icons/playpause-on.png</file>
-    <file>icons/ffwd.png</file>
-    <file>icons/ffwd-end.png</file>
-    <file>icons/rewind.png</file>
-    <file>icons/rewind-start.png</file>
-    <file>icons/playselection.png</file>
-    <file>icons/playselection-on.png</file>
-    <file>icons/playloop.png</file>
-    <file>icons/playloop-on.png</file>
-    <file>icons/playfollow.png</file>
-    <file>icons/playfollow-on.png</file>
-    <file>icons/solo.png</file>
-    <file>icons/solo-on.png</file>
-    <file>icons/align.png</file>
-    <file>icons/align-on.png</file>
-    <file>icons/fader_background.png</file>
-    <file>icons/fader_knob.png</file>
-    <file>icons/fader_knob_red.png</file>
-    <file>icons/fader_leds.png</file>
-    <file>icons/faders.png</file>
-    <file>icons/select.png</file>
-    <file>icons/text.png</file>
-    <file>icons/draw.png</file>
     <file>icons/draw-curve.png</file>
-    <file>icons/erase.png</file>
     <file>icons/measure.png</file>
     <file>icons/measure1cursor.xbm</file>
     <file>icons/measure1mask.xbm</file>
     <file>icons/measure2cursor.xbm</file>
     <file>icons/measure2mask.xbm</file>
-    <file>icons/move.png</file>
-    <file>icons/navigate.png</file>
-    <file>icons/zoom-reset.png</file>
-    <file>icons/undo.png</file>
-    <file>icons/redo.png</file>
     <file>icons/new.png</file>
-    <file>icons/exit.png</file>
-    <file>icons/speaker.png</file>
     <file>icons/annotation.png</file>
-    <file>icons/info.png</file>
-    <file>icons/fileopen.png</file>
-    <file>icons/fileopensession.png</file>
-    <file>icons/fileopenaudio.png</file>
-    <file>icons/fileopen-22.png</file>
-    <file>icons/fileclose.png</file>
-    <file>icons/filenew.png</file>
-    <file>icons/filenew-22.png</file>
-    <file>icons/filesave.png</file>
-    <file>icons/filesave-22.png</file>
-    <file>icons/filesaveas.png</file>
-    <file>icons/filesaveas-22.png</file>
-    <file>icons/editdelete.png</file>
-    <file>icons/editcut.png</file>
-    <file>icons/editcopy.png</file>
-    <file>icons/editpaste.png</file>
-    <file>icons/datadelete.png</file>
-    <file>icons/dataedit.png</file>
     <file>icons/datainsert.png</file>
     <file>icons/mono.png</file>
     <file>icons/stereo.png</file>
     <file>icons/sharpen.png</file>
-    <file>icons/help.png</file>
     <file>icons/emptypage.png</file>
-    <file>icons/cross.png</file>
-    <file>icons/normalise.png</file>
-    <file>icons/normalise-columns.png</file>
     <file>icons/invert-vertical.png</file>
-    <file>icons/show-peaks.png</file>
     <file>icons/opaque.png</file>
     <file>icons/smooth.png</file>
     <file>icons/lines.png</file>
@@ -170,5 +120,10 @@
     <file>i18n/sonic-visualiser_en_US.qm</file>
     <file>i18n/sonic-visualiser_cs_CZ.qm</file>
     <file>i18n/tips_en.xml</file>
+    <file>README.md</file>
+    <file>README.OSC</file>
+    <file>CHANGELOG</file>
+    <file>COPYING</file>
+    <file>CITATION</file>
 </qresource>
 </RCC>
--- a/sv.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/sv.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -17,6 +17,28 @@
 linux*:TARGET = sonic-visualiser
 solaris*:TARGET = sonic-visualiser
 
+!win32 {
+    PRE_TARGETDEPS += $$PWD/libbase.a
+    QMAKE_POST_LINK += cp checker/vamp-plugin-load-checker .
+}
+
+linux* {
+
+    sv_bins.path = $$PREFIX_PATH/bin/
+    sv_bins.files = checker/vamp-plugin-load-checker piper-vamp-simple-server sonic-visualiser
+    sv_bins.CONFIG = no_check_exist
+
+    sv_desktop.path = $$PREFIX_PATH/share/applications/
+    sv_desktop.files = sonic-visualiser.desktop
+    sv_desktop.CONFIG = no_check_exist
+
+    sv_icon.path = $$PREFIX_PATH/share/icons/hicolor/scalable/apps/
+    sv_icon.files = icons/sonic-visualiser.svg
+    sv_icon.CONFIG = no_check_exist
+    
+    INSTALLS += sv_bins sv_desktop sv_icon
+}
+
 TRANSLATIONS += \
         i18n/sonic-visualiser_ru.ts \
 	i18n/sonic-visualiser_en_GB.ts \
--- a/test-svcore-base.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/test-svcore-base.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -28,4 +28,6 @@
 for (file, TEST_SOURCES) { SOURCES += $$sprintf("svcore/base/test/%1", $$file) }
 for (file, TEST_HEADERS) { HEADERS += $$sprintf("svcore/base/test/%1", $$file) }
 
-QMAKE_POST_LINK = ./$${TARGET}$${TARGET_EXT}
+!win32* {
+    QMAKE_POST_LINK = ./$${TARGET}
+}
--- a/test-svcore-data-fileio.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/test-svcore-data-fileio.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -28,4 +28,6 @@
 for (file, TEST_SOURCES) { SOURCES += $$sprintf("svcore/data/fileio/test/%1", $$file) }
 for (file, TEST_HEADERS) { HEADERS += $$sprintf("svcore/data/fileio/test/%1", $$file) }
 
-QMAKE_POST_LINK = ./$${TARGET}$${TARGET_EXT}
+!win32* {
+    QMAKE_POST_LINK = ./$${TARGET}
+}
--- a/test-svcore-data-model.pro	Mon Sep 17 13:53:25 2018 +0100
+++ b/test-svcore-data-model.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -28,4 +28,6 @@
 for (file, TEST_SOURCES) { SOURCES += $$sprintf("svcore/data/model/test/%1", $$file) }
 for (file, TEST_HEADERS) { HEADERS += $$sprintf("svcore/data/model/test/%1", $$file) }
 
-QMAKE_POST_LINK = ./$${TARGET}$${TARGET_EXT}
+!win32* {
+    QMAKE_POST_LINK = ./$${TARGET}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-svcore-system.pro	Mon Sep 17 14:05:41 2018 +0100
@@ -0,0 +1,33 @@
+
+TEMPLATE = app
+
+exists(config.pri) {
+    include(config.pri)
+}
+
+!exists(config.pri) {
+    include(noconfig.pri)
+}
+
+include(base.pri)
+
+CONFIG += console
+QT += network xml testlib
+QT -= gui
+
+win32-x-g++:QMAKE_LFLAGS += -Wl,-subsystem,console
+macx*: CONFIG -= app_bundle
+
+TARGET = test-svcore-system
+
+OBJECTS_DIR = o
+MOC_DIR = o
+
+include(svcore/system/test/files.pri)
+
+for (file, TEST_SOURCES) { SOURCES += $$sprintf("svcore/system/test/%1", $$file) }
+for (file, TEST_HEADERS) { HEADERS += $$sprintf("svcore/system/test/%1", $$file) }
+
+!win32* {
+    QMAKE_POST_LINK = ./$${TARGET}
+}
--- a/version.h	Mon Sep 17 13:53:25 2018 +0100
+++ b/version.h	Mon Sep 17 14:05:41 2018 +0100
@@ -1,1 +1,1 @@
-#define SV_VERSION "3.0"
+#define SV_VERSION "3.2"