[3depict] 01/03: Imported Upstream version 0.0.15

D Haley mycae-guest at moszumanska.debian.org
Sun Dec 8 13:04:02 UTC 2013


This is an automated email from the git hooks/post-receive script.

mycae-guest pushed a commit to branch master
in repository 3depict.

commit 702b766b6355df24b8668427586419f8ba663f45
Author: D Haley <mycae at gmx.com>
Date:   Sun Dec 1 18:01:05 2013 +0100

    Imported Upstream version 0.0.15
---
 ChangeLog                                          |   47 +
 Makefile.am                                        |    0
 Makefile.in                                        |  319 +--
 README                                             |   23 +
 TODO                                               |   16 +-
 acinclude.m4                                       |    0
 aclocal.m4                                         |  682 +++---
 compile                                            |  347 +++
 config.guess                                       |  575 +++--
 config.h.in                                        |    0
 config.rpath                                       |    0
 config.sub                                         |  299 ++-
 configure                                          |  387 +++-
 configure.ac                                       |   11 +-
 data/atomic-mass-table.dtd                         |   56 +
 data/naturalAbundance.xml                          | 1608 ++++++++++++++
 data/startup-tips.txt                              |   23 +
 depcomp                                            |  601 ++++--
 docs/manual-latex/3depictusermanual.kilepr         |   12 +-
 docs/manual-latex/figures/rangeEditOverlay.png     |  Bin 0 -> 123741 bytes
 docs/manual-latex/figures/rangeedit-clash.png      |  Bin 0 -> 129283 bytes
 docs/manual-latex/figures/tree-layout.png          |  Bin 0 -> 53210 bytes
 docs/manual-latex/figures/tree-layout.svg          |  266 +++
 docs/manual-latex/manual.aux                       |  191 --
 docs/manual-latex/manual.bbl                       |   21 -
 docs/manual-latex/manual.bib                       |  143 +-
 docs/manual-latex/manual.blg                       |   46 -
 docs/manual-latex/manual.log                       |  569 -----
 docs/manual-latex/manual.out                       |   83 -
 docs/manual-latex/manual.pdf                       |  Bin 4248400 -> 4517305 bytes
 docs/manual-latex/manual.tex                       |   96 +-
 docs/manual-latex/manual.tex.backup                | 1840 ----------------
 docs/manual-latex/manual.toc                       |   91 -
 docs/samples/externalProg/bash-example.sh          |    0
 docs/samples/externalProg/python-example.py        |    0
 install-sh                                         |  528 ++++-
 m4/freetype2.m4                                    |    0
 m4/ftgl.m4                                         |    0
 m4/gl.m4                                           |    0
 m4/gsl.m4                                          |    0
 m4/libxml2.m4                                      |    0
 m4/opengl.m4                                       |    0
 m4/wxwin.m4                                        |    0
 missing                                            |  460 ++--
 packaging/3Depict.desktop                          |    0
 ...t-path.patch => 3Depict-0.0.15-font-path.patch} |    4 +-
 ...c.patch => 3Depict-0.0.15-manual-pdf-loc.patch} |    0
 packaging/RPM/3Depict.spec                         |   10 +-
 packaging/debian/3depict.1                         |    0
 packaging/debian/3depict.install                   |    3 +
 packaging/debian/changelog                         |   10 +-
 packaging/debian/compat                            |    0
 packaging/debian/control                           |    2 +-
 packaging/debian/copyright                         |    0
 packaging/debian/docs                              |    0
 packaging/debian/manpages                          |    0
 packaging/debian/menu                              |    0
 packaging/debian/patches/FTGL-lowercase.patch      |    8 +-
 .../debian/patches/debian-desktop-naming.patch     |    6 +-
 .../debian/patches/lowercase-textdomain.patch      |    4 +-
 packaging/debian/patches/series                    |    0
 packaging/debian/rules                             |    1 +
 packaging/debian/source/format                     |    0
 packaging/debian/source/include-binaries           |    1 -
 packaging/debian/source/local-options              |    0
 packaging/debian/tests/control                     |    0
 packaging/debian/watch                             |    0
 packaging/deps/getDeps                             |   24 +-
 .../deps/patches/macosx/mathgl2/diff-obj.c.patch   |   13 +
 .../macosx/mathgl2/diff-prc-writePRC.h.patch       |   24 +
 packaging/deps/sources/mgl_data_png.patch          |    0
 packaging/deps/sources/mgl_eps.patch               |    0
 packaging/deps/sources/mgl_export.patch            |    0
 packaging/mac/3Depict.app/Contents/Info.plist      |   30 +-
 packaging/mac/3Depict.app/Contents/PkgInfo         |    0
 .../mac/3Depict.app/Contents/Resources/wxmac.icns  |  Bin
 packaging/mac/3Depict.xcodeproj/project.pbxproj    |  852 --------
 packaging/mac/3package.sh                          |   22 +-
 .../MacPackageMaker.pmdoc/013depict-contents.xml   |    1 -
 packaging/mac/MacPackageMaker.pmdoc/013depict.xml  |    1 -
 packaging/mac/MacPackageMaker.pmdoc/index.xml      |    1 -
 packaging/mac/makeMacOSXApp                        |   10 +-
 packaging/makeTarball.sh                           |    4 +-
 packaging/manpage/3Depict.1                        |    0
 packaging/mingw-debian-cross/bootstrap.sh          |  174 +-
 packaging/mingw-debian-cross/build-wx-3.0.sh       |  172 ++
 .../patches/configure-wxbool-patch                 |   12 +
 .../mingw-debian-cross/patches/ftgl-disable-doc    |   31 +
 .../patches/ftgl-mingw32-prototype                 |    0
 .../patches/ftgl-override-configure                |   25 -
 .../patches/ftgl-override-configure-2              |   14 +
 .../patches/gettext-disable-tools                  |  165 +-
 .../patches/gettext-win32-prefix                   |    0
 packaging/mingw-debian-cross/patches/glew-makefile |    4 +-
 .../patches/{glew-makefile => glew-makefile.base}  |    0
 .../mingw-debian-cross/patches/gsl-config.patch    |    0
 .../patches/mathgl-disable-widgets                 |   10 +
 ...onfig-sysroot.patch => wx-config-sysroot.patch} |    0
 packaging/mingw-debian-cross/patches/wx-jpeg-patch |   12 +
 ...64-1.patch => wxWidgets-2.8.12-mingw64-1.patch} |    0
 .../mingw-debian-cross/patches/zlib-no-lc.patch    |    0
 packaging/mingw-debian-cross/windows-installer.nsi |   70 +-
 src/3Depict.cpp                                    |   16 +-
 src/Makefile.am                                    |   50 +-
 src/Makefile.in                                    | 2253 ++++++++++++--------
 src/backend/APT/APTRanges.cpp                      |  523 +++--
 src/backend/APT/APTRanges.h                        |   53 +-
 src/backend/APT/abundanceParser.cpp                |  355 +++
 src/backend/APT/abundanceParser.h                  |   99 +
 src/backend/APT/ionhit.cpp                         |   26 +-
 src/backend/APT/ionhit.h                           |   17 +
 src/backend/animator.cpp                           |    6 +-
 src/backend/configFile.cpp                         |   48 +-
 src/backend/configFile.h                           |   13 +
 src/backend/filter.cpp                             |   78 +-
 src/backend/filter.h                               |   56 +-
 .../filters/{ => algorithms}/K3DTree-mk2.cpp       |    0
 src/backend/filters/{ => algorithms}/K3DTree-mk2.h |    0
 src/backend/filters/{ => algorithms}/K3DTree.cpp   |    0
 src/backend/filters/{ => algorithms}/K3DTree.h     |    0
 src/backend/filters/algorithms/binomial.cpp        |  789 +++++++
 src/backend/filters/algorithms/binomial.h          |  117 +
 src/backend/filters/{ => algorithms}/rdf.cpp       |    5 +-
 src/backend/filters/{ => algorithms}/rdf.h         |    0
 src/backend/filters/annotation.cpp                 |    6 +-
 src/backend/filters/boundingBox.cpp                |    4 +-
 src/backend/filters/clusterAnalysis.cpp            |    5 +-
 src/backend/filters/compositionProfile.cpp         |   18 +-
 src/backend/filters/dataLoad.cpp                   |   64 +-
 src/backend/filters/externalProgram.cpp            |  305 +--
 src/backend/filters/externalProgram.h              |   15 +
 src/backend/filters/filterCommon.cpp               |    4 +-
 src/backend/filters/filterCommon.h                 |    2 +-
 src/backend/filters/geometryHelpers.cpp            |   10 +-
 src/backend/filters/geometryHelpers.h              |    1 +
 src/backend/filters/ionClip.cpp                    |    4 +-
 src/backend/filters/ionColour.cpp                  |   99 +-
 src/backend/filters/ionColour.h                    |    2 +
 src/backend/filters/ionDownsample.cpp              |   50 +-
 src/backend/filters/ionInfo.cpp                    |    2 -
 src/backend/filters/rangeFile.cpp                  |   56 +-
 src/backend/filters/rangeFile.h                    |    4 +-
 src/backend/filters/spatialAnalysis.cpp            |  970 +++++++--
 src/backend/filters/spatialAnalysis.h              |   30 +
 src/backend/filters/spectrumPlot.cpp               |    4 +-
 src/backend/filters/transform.cpp                  |   69 +-
 src/backend/filters/voxelise.cpp                   |   30 +-
 src/backend/filtertree.cpp                         |  359 ++--
 src/backend/filtertree.h                           |   27 +-
 src/backend/plot.cpp                               |  708 ++++--
 src/backend/plot.h                                 |  225 +-
 src/backend/state.cpp                              |   75 +-
 src/backend/state.h                                |   11 +-
 src/backend/tree.hh                                |    0
 src/backend/viscontrol.cpp                         |   41 +-
 src/backend/viscontrol.h                           |   35 +-
 src/common/assertion.h                             |    1 -
 src/common/basics.cpp                              |   71 +-
 src/common/basics.h                                |  117 +-
 src/common/colourmap.cpp                           |   10 +-
 src/common/colourmap.h                             |    3 +-
 src/common/constants.h                             |   11 +-
 src/common/mathfuncs.h                             |    1 -
 src/common/pngread.c                               |   19 +-
 src/common/pngread.h                               |    1 +
 src/common/stringFuncs.cpp                         |   17 +-
 src/common/stringFuncs.h                           |    4 +
 src/common/voxels.h                                |  172 +-
 src/common/xmlHelper.h                             |   29 +
 src/gl/cameras.cpp                                 |  167 +-
 src/gl/cameras.h                                   |   31 +-
 src/gl/drawables.cpp                               |   84 +-
 src/gl/drawables.h                                 |   36 +-
 src/gl/glDebug.h                                   |   74 +
 src/gl/scene.cpp                                   |  136 +-
 src/gl/scene.h                                     |   60 +-
 src/gl/select.cpp                                  |    9 +
 src/gl/select.h                                    |    7 +-
 src/gl/textures.cpp                                |   12 +-
 src/gl/tr.cpp                                      |  493 +++++
 src/gl/tr.h                                        |  149 ++
 src/gui/dialogs/ExportPos.cpp                      |    4 +-
 src/gui/dialogs/ExportRngDialog.cpp                |    2 +-
 src/gui/dialogs/StashDialog.cpp                    |    6 +-
 src/gui/dialogs/StashDialog.h                      |    2 +-
 src/gui/dialogs/animateFilterDialog.cpp            |   17 +-
 src/gui/dialogs/animateFilterDialog.h              |    2 +-
 .../animateSubDialogs/choiceKeyFrameDialog.cpp     |    2 +-
 .../animateSubDialogs/colourKeyFrameDialog.cpp     |    6 +-
 .../dialogs/animateSubDialogs/realKeyFrameDialog.h |    2 +-
 .../animateSubDialogs/stringKeyFrameDialog.cpp     |    6 +-
 src/gui/dialogs/autosaveDialog.cpp                 |    2 +-
 src/gui/dialogs/filterErrorDialog.cpp              |    2 +-
 src/gui/dialogs/prefDialog.cpp                     |   70 +-
 src/gui/dialogs/prefDialog.h                       |   22 +-
 src/gui/dialogs/rangeEditDialog.cpp                | 1623 ++++++++++++++
 src/gui/dialogs/rangeEditDialog.h                  |  230 ++
 src/gui/dialogs/resolutionDialog.cpp               |  165 +-
 src/gui/dialogs/resolutionDialog.h                 |    7 +-
 src/gui/glPane.cpp                                 |  371 ++--
 src/gui/glPane.h                                   |   12 +-
 src/gui/glade-skeleton/animateFilterDialog.wxg     |    0
 .../animateSubDialogs/choiceKeyFrameDialog.wxg     |    0
 .../animateSubDialogs/colourChooserDialog.wxg      |    0
 .../animateSubDialogs/realKeyFrameDialog.wxg       |    0
 .../animateSubDialogs/stringKeyFrameDialog.wxg     |    0
 src/gui/glade-skeleton/autosaveDialog.wxg          |    0
 src/gui/glade-skeleton/errorDialog.wxg             |    0
 src/gui/glade-skeleton/mainWindow.wxg              |    0
 src/gui/glade-skeleton/prefDialog.cpp              |  272 +++
 src/gui/glade-skeleton/prefDialog.h                |   96 +
 src/gui/glade-skeleton/preferencesDialog.wxg       |  240 ++-
 src/gui/glade-skeleton/rangeDialog.wxg             |  273 +++
 src/gui/glade-skeleton/resDialog.wxg               |    0
 src/gui/mainFrame.cpp                              |  713 ++++---
 src/gui/mainFrame.h                                |   35 +-
 src/gui/mathglPane.cpp                             |   86 +-
 src/gui/mathglPane.h                               |   38 +-
 src/{testing.cpp => testing/filtertesting.cpp}     |  419 +---
 src/{ => testing}/testing.cpp                      |  411 +---
 src/{ => testing}/testing.h                        |    0
 src/{ => wx}/wxcommon.cpp                          |    8 +-
 src/{ => wx}/wxcommon.h                            |    0
 src/{ => wx}/wxcomponents.cpp                      |   84 +-
 src/{ => wx}/wxcomponents.h                        |    8 +-
 test/rangefiles/test6.rrng                         |   12 +
 translations/makeTranslations                      |    2 +-
 227 files changed, 16365 insertions(+), 9398 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c61a060..537f075 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+* 30 Oct 2013 : 0.0.15
+	Features
+	- Range editing dialog : Rangefiles can be modified via a dialog available from the "edit" menu
+		- A Range filter and a spectra filter must be present first
+		- "Overlays" can be used to generate isotopic distributions for comparison
+	- "Binomial analysis" algorithm, (Moody et al, 2011) for data randomness testing
+	
+	User Visible Changes:
+	- Middle double click to zoomout on plots
+	- Improved user feedback in transform filter
+	- Better console output, messages now persistent
+	- Progress dialog for animation
+	- Colour bar auto-changes colour on light backgrounds
+	- Colour maps now reversible
+	- Orthogonal camera can be selected by default
+	- Improved RRNG and ENV support
+		- ENV 0.3 supported
+	
+	User Visible Bugfixes:
+	- Image export fixed wrong aspect ratio ion output images
+	- Fix plot export dialog when (png/svg) extension given
+	- Fix tree/property grid not always synchronised
+	- Fix "jumping" of movable objects after interaction
+	- Fix custom filter names not being saved correctly 
+	- Fix undo not recorded after tree copy 
+	- Fix axial dist aborting problem
+	- Fix loading of .xy files from external program filter
+	- Fix hang when disabling weak/fast randomisation
+	- Fix intermittent problems with spatial analysis filter aborting
+	- Fix incorrect parsing of external program commands
+	- Fix state file loading in downsample filter, fixed count mode
+	- Fix camera animation continually asking if you want to save,
+	  after animation completion
+	- Fix colour interpolation in animate dialog
+
+	Technical bugfixes/changes:
+	- Fix hang when filters given directories as input (linux)
+	- Fix bug in extern filter where data would be output even on empty command
+	- Better out-of-memory exception handling at refresh level
+	- Various memory leak fixes
+	- Refactoring
+		- filter caching 
+		- unit testing 
+		- scene opengl init
+	- More unit testing 
+	- Remove plot pane polling for region change
+
 * 20 Jul 2013 : 0.0.14
 	Features:
 	- 2D slice render mode for voxels. Can now visualise voxel data
diff --git a/Makefile.am b/Makefile.am
old mode 100644
new mode 100755
diff --git a/Makefile.in b/Makefile.in
index bd3d756..1c02561 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,23 +14,51 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -51,11 +78,11 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
-	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-	TODO config.guess config.rpath config.sub depcomp install-sh \
-	missing
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/configure $(am__configure_deps) \
+	$(srcdir)/config.h.in AUTHORS COPYING ChangeLog INSTALL NEWS \
+	README TODO compile config.guess config.rpath config.sub \
+	depcomp install-sh missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ftgl.m4 $(top_srcdir)/m4/gsl.m4 \
 	$(top_srcdir)/m4/wxwin.m4 $(top_srcdir)/acinclude.m4 \
@@ -68,15 +95,28 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-	html-recursive info-recursive install-data-recursive \
-	install-dvi-recursive install-exec-recursive \
-	install-html-recursive install-info-recursive \
-	install-pdf-recursive install-ps-recursive install-recursive \
-	installcheck-recursive installdirs-recursive pdf-recursive \
-	ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -84,11 +124,33 @@ am__can_run_installinfo = \
   esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-	distdir dist dist-all distcheck
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+	$(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+CSCOPE = cscope
 DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
@@ -99,6 +161,7 @@ am__remove_distdir = \
       && rm -rf "$(distdir)" \
       || { sleep 5 && rm -rf "$(distdir)"; }; \
   else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -126,12 +189,14 @@ am__relativize = \
   reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
 distuninstallcheck_listfiles = find . -type f -print
 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
   | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -306,8 +371,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then rm -f stamp-h1; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -321,22 +386,25 @@ distclean-hdr:
 	-rm -f config.h stamp-h1
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
-	list='$(SUBDIRS)'; for subdir in $$list; do \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
 	  echo "Making $$target in $$subdir"; \
 	  if test "$$subdir" = "."; then \
 	    dot_seen=yes; \
@@ -351,57 +419,12 @@ $(RECURSIVE_TARGETS):
 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
 	fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-	@fail= failcom='exit 1'; \
-	for f in x $$MAKEFLAGS; do \
-	  case $$f in \
-	    *=* | --[!k]*);; \
-	    *k*) failcom='fail=yes';; \
-	  esac; \
-	done; \
-	dot_seen=no; \
-	case "$@" in \
-	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-	  *) list='$(SUBDIRS)' ;; \
-	esac; \
-	rev=''; for subdir in $$list; do \
-	  if test "$$subdir" = "."; then :; else \
-	    rev="$$subdir $$rev"; \
-	  fi; \
-	done; \
-	rev="$$rev ."; \
-	target=`echo $@ | sed s/-recursive//`; \
-	for subdir in $$rev; do \
-	  echo "Making $$target in $$subdir"; \
-	  if test "$$subdir" = "."; then \
-	    local_target="$$target-am"; \
-	  else \
-	    local_target="$$target"; \
-	  fi; \
-	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-	  || eval $$failcom; \
-	done && test -z "$$fail"
-tags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-	done
-ctags-recursive:
-	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-	done
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -417,12 +440,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -434,15 +452,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -451,9 +465,31 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+	-rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
@@ -521,40 +557,42 @@ distdir: $(DISTFILES)
 	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-bzip2: distdir
 	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-lzip: distdir
 	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-	$(am__remove_distdir)
-
-dist-lzma: distdir
-	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-xz: distdir
 	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-shar: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
 dist-zip: distdir
 	-rm -f $(distdir).zip
 	zip -rq $(distdir).zip $(distdir)
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 
-dist dist-all: distdir
-	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-	$(am__remove_distdir)
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
@@ -565,8 +603,6 @@ distcheck: dist
 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-	*.tar.lzma*) \
-	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
 	*.tar.lz*) \
 	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
@@ -578,9 +614,9 @@ distcheck: dist
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod u+w $(distdir)
-	mkdir $(distdir)/_build
-	mkdir $(distdir)/_inst
+	chmod -R a-w $(distdir)
+	chmod u+w $(distdir)
+	mkdir $(distdir)/_build $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
@@ -612,7 +648,7 @@ distcheck: dist
 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
 	  && cd "$$am__cwd" \
 	  || exit 1
-	$(am__remove_distdir)
+	$(am__post_remove_distdir)
 	@(echo "$(distdir) archives ready for distribution: "; \
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
@@ -746,13 +782,12 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
-	ctags-recursive install-am install-strip tags-recursive
+.MAKE: $(am__recursive_targets) all install-am install-strip
 
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-	all all-am am--refresh check check-am clean clean-generic \
-	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-	dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--refresh check check-am clean clean-cscope clean-generic \
+	cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+	dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
 	distcheck distclean distclean-generic distclean-hdr \
 	distclean-tags distcleancheck distdir distuninstallcheck dvi \
 	dvi-am html html-am info info-am install install-am \
@@ -762,8 +797,8 @@ uninstall-am:
 	install-pdf-am install-ps install-ps-am install-strip \
 	installcheck installcheck-am installdirs installdirs-am \
 	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am
+	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/README b/README
index bed270b..db45638 100644
--- a/README
+++ b/README
@@ -19,7 +19,30 @@ Interesting configure flags (see ./configure --help):
 --disable-debug-checks : Disable debug checks. This makes the program
 				much faster, but less likely to catch
 				program bugs
+--enable-mgl2 : Enable mathgl 2.x mode. By default, mathgl 1.x is assumed
+			to be installed
 
 
+Some Dependencies:
+	libxml2
+	qhull
+	gsl
+	ftgl 
+	mathgl
+	libpng
+	wxwidgets
+	gettext
 
 
+	Remember, for dependencies under linux platforms you must install
+	the -dev, or -devel packages, in order to allow compilation
+
+	For those with no idea how to install the dependencies, you can
+	*try* running the "getDeps.sh" script in the packaging/deps/
+	folder, but it is not guaranteed to work on your system.
+
+	For those under Windows, we recommend to install a different
+	OS (eg debian, ubuntu - maybe in a Virtual machine) then
+	"cross-compile". This is not trivial, but you can look at the
+	deps/mingw-debian-cross/bootstrap.sh script as a starting point.
+
diff --git a/TODO b/TODO
index a1e5a77..de5b5ec 100644
--- a/TODO
+++ b/TODO
@@ -5,18 +5,13 @@ TODO List - worlds simplest bugtracking system
 --Main app--
 	To Implement:
 		== Next version ==
-		* Range editor
-		* Unit tests for statefile with stashes
-		* Improved filter tree visibility behaviour 
-		* Unit testing of text data loading routines
 
 		== Eventually == 
-		* Plot overlays
+		* Improved filter tree visibility behaviour 
 		* Support for XY scatter plots
 		* Status bar message queue
 		* Voxel export dialog 
 		* VTK voxel data export
-		* Binomial? (MM edition)
 		* OPS and other 3DAP formats reader?
 		* Stream information filter (Easy fix, but needs time/thought)
 		* Polynomial error estimator in graph
@@ -56,14 +51,9 @@ TODO List - worlds simplest bugtracking system
 
 	Outstanding bugs:
 		== Next release==
-		* File -> export image -> Height*=2, results in aspect ratio of output image being distorted
 		* Cluster filter wont save state correctly if parent
 		  rangefile has disabled ions. It will output incorrect
 		  number of enabled ions, and get wiped during next ::initFilter
-		
-		Windows:
-		* Drawing updates for resolution dialog are wonk
-		
 			
 		== Eventually==
 		* Lighting calculations on isosurfaces can be problematic. See example package
@@ -91,6 +81,8 @@ TODO List - worlds simplest bugtracking system
 			* icon on dock bounces very fast during some refreshes
 
 		== Needs reproducing ==
+		* External program loading from XML doesn't seem to
+		  restore command?
 
 	Auditing:
 		== Next release ==
@@ -126,6 +118,8 @@ TODO List - worlds simplest bugtracking system
 	* work out which inline FIXMEs and TODOs are still valid, and need attention
 	* I have multiple colour classes floating about. might be an idea to unify them.
 	* K3DTree currently requires public access to members of boundcube
+	* Enums should be, where possible, moved into their relevant class' namespace
+	* Better error code behaviour for filters. There is a lot of needless duplication
 
 -- Deprecate --
 	* On Minor version change:
diff --git a/acinclude.m4 b/acinclude.m4
old mode 100644
new mode 100755
diff --git a/aclocal.m4 b/aclocal.m4
index ea3cdea..5d56c40 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,8 +1,7 @@
-# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
+# generated automatically by aclocal 1.14 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
-# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -12,13 +11,14 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
 [m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
 # pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
 # serial 1 (pkg-config-0.24)
@@ -180,25 +180,22 @@ else
 fi[]dnl
 ])# PKG_CHECK_MODULES
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
+[am__api_version='1.14'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.6], [],
+m4_if([$1], [1.14], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -214,24 +211,22 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.6])dnl
+[AM_AUTOMAKE_VERSION([1.14])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
@@ -250,7 +245,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -276,22 +271,19 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
-
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
 AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
@@ -310,16 +302,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
-# 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 12
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
@@ -329,7 +319,7 @@ fi])])
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -342,12 +332,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
@@ -355,8 +346,8 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -396,16 +387,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -414,8 +405,8 @@ AC_CACHE_CHECK([dependency style of $depcc],
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
@@ -423,7 +414,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -471,7 +462,7 @@ AM_CONDITIONAL([am__fastdep$1], [
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -481,9 +472,13 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
@@ -498,20 +493,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 5
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -524,7 +517,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -536,21 +529,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`AS_DIRNAME(["$file"])`
@@ -568,7 +559,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
+# is enabled.  FIXME.  This creates each '.P' file that we will
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
@@ -578,18 +569,21 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 16
-
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
 # AM_INIT_AUTOMAKE([OPTIONS])
 # -----------------------------------------------
@@ -602,7 +596,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
+[AC_PREREQ([2.65])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -631,31 +625,40 @@ AC_SUBST([CYGPATH_W])
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
@@ -666,34 +669,78 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
 			     [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-		  [_AM_DEPENDENCIES(CC)],
-		  [define([AC_PROG_CC],
-			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+		  [_AM_DEPENDENCIES([CC])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-		  [_AM_DEPENDENCIES(CXX)],
-		  [define([AC_PROG_CXX],
-			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-		  [_AM_DEPENDENCIES(OBJC)],
-		  [define([AC_PROG_OBJC],
-			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-])
 
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
 dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
 m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
 
-
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
 # that is generated.  The stamp files are numbered to have different names.
@@ -715,15 +762,12 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
-# Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -737,16 +781,14 @@ if test x"${install_sh}" != xset; then
     install_sh="\${SHELL} $am_aux_dir/install-sh"
   esac
 fi
-AC_SUBST(install_sh)])
+AC_SUBST([install_sh])])
 
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
@@ -762,14 +804,12 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -787,7 +827,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -814,15 +854,12 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
-
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
 AC_DEFUN([AM_MISSING_PROG],
@@ -830,11 +867,10 @@ AC_DEFUN([AM_MISSING_PROG],
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
-
 # AM_MISSING_HAS_RUN
 # ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
@@ -847,54 +883,22 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
-# Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 1
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
-
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
@@ -904,7 +908,7 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 # --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
 
 # _AM_SET_OPTIONS(OPTIONS)
 # ------------------------
@@ -918,24 +922,82 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -946,32 +1008,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$[2]" = conftest.file
    )
 then
@@ -981,46 +1051,118 @@ else
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
 
-# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
 # AM_PROG_INSTALL_STRIP
 # ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2006-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
-
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
@@ -1034,18 +1176,16 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
@@ -1055,76 +1195,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # Substitute a variable $(am__untar) that extract such
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
+#
 AC_DEFUN([_AM_PROG_TAR],
 [# Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AC_SUBST([AMTAR], ['$${TAR-tar}'])
-m4_if([$1], [v7],
-     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
+
+# We'll loop over all known methods to create a tar archive until one works.
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
 
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
 
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
   rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
 
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
 AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
diff --git a/compile b/compile
new file mode 100755
index 0000000..531136b
--- /dev/null
+++ b/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# 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, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
index 9521fc4..b79252d 100755
--- a/config.guess
+++ b/config.guess
@@ -1,14 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-#   Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2009-04-27'
+timestamp='2013-06-10'
 
 # This file 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
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -17,26 +15,22 @@ timestamp='2009-04-27'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner.
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -139,22 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "${UNAME_MACHINE}" in
-    i?86)
-	test -z "$VENDOR" && VENDOR=pc
-	;;
-    *)
-	test -z "$VENDOR" && VENDOR=unknown
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
 	;;
 esac
-test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
 
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -180,7 +184,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
+			| grep -q __ELF__
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -190,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
 		;;
 	esac
 	# The OS release
@@ -211,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
 	exit ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -233,7 +241,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -279,7 +287,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -305,12 +316,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
 	echo arm-unknown-riscos
 	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -343,6 +354,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
 	SUN_ARCH="i386"
@@ -401,23 +415,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -487,8 +501,8 @@ EOF
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -501,7 +515,7 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -558,7 +572,7 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -601,52 +615,52 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -666,7 +680,7 @@ EOF
 	    # => hppa64-hp-hpux11.23
 
 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+		grep -q __LP64__
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -737,22 +751,22 @@ EOF
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -776,14 +790,14 @@ EOF
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -795,34 +809,39 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
 	    amd64)
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    *:Interix*:[3456]*)
-    	case ${UNAME_MACHINE} in
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
 	    x86)
 		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
-	    EM64T | authenticamd | genuineintel)
+	    authenticamd | genuineintel | EM64T)
 		echo x86_64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	    IA64)
@@ -832,6 +851,9 @@ EOF
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
 	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -852,210 +874,157 @@ EOF
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
-	    echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	else
-	    echo ${UNAME_MACHINE}-${VENDOR}-linux-gnueabi
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    i*86:Linux:*:*)
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    mips:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips
-	#undef mipsel
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
-	;;
-    mips64:Linux:*:*)
+    mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#undef CPU
-	#undef mips64
-	#undef mips64el
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
+	CPU=${UNAME_MACHINE}el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
+	CPU=${UNAME_MACHINE}
 	#else
 	CPU=
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
-    or32:Linux:*:*)
-	echo or32-${VENDOR}-linux-gnu
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-${VENDOR}-linux-gnu
+    or1k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-${VENDOR}-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
- 	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC}
+    or32:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     padre:Linux:*:*)
-	echo sparc-unknown-linux-gnu
+	echo sparc-unknown-linux-${LIBC}
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-${LIBC}
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
-	  PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
-	  *)    echo hppa-${VENDOR}-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-${VENDOR}-linux-gnu
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-${LIBC}
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     xtensa*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-${VENDOR}-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuaout"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^LIBC/{
-		s: ::g
-		p
-	    }'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -1063,11 +1032,11 @@ EOF
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1076,16 +1045,16 @@ EOF
 	echo ${UNAME_MACHINE}-pc-os2-emx
 	exit ;;
     i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-${VENDOR}-stop
+	echo ${UNAME_MACHINE}-unknown-stop
 	exit ;;
     i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-atheos
+	echo ${UNAME_MACHINE}-unknown-atheos
 	exit ;;
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-	echo i386-${VENDOR}-lynxos${UNAME_RELEASE}
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
@@ -1099,13 +1068,13 @@ EOF
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
-	echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
 	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
@@ -1127,13 +1096,13 @@ EOF
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
 	# prints for the "djgpp" host, or else GDB configury will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
-        exit ;;
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1144,7 +1113,7 @@ EOF
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-${VENDOR}-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
 	exit ;;
     mini*:CTIX:SYS*5:*)
@@ -1168,8 +1137,8 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
@@ -1181,19 +1150,19 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
 	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-${VENDOR}-lynxos${UNAME_RELEASE}
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
 	exit ;;
     TSUNAMI:LynxOS:2.*:*)
-	echo sparc-${VENDOR}-lynxos${UNAME_RELEASE}
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     rs6000:LynxOS:2.*:*)
-	echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE}
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-	echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE}
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
@@ -1212,10 +1181,10 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel at ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel at ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes at openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1241,11 +1210,11 @@ EOF
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-${VENDOR}-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1258,6 +1227,9 @@ EOF
     BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
 	echo i586-pc-haiku
 	exit ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
@@ -1284,9 +1256,21 @@ EOF
 	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		case $UNAME_PROCESSOR in
+		    i386) UNAME_PROCESSOR=x86_64 ;;
+		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		esac
+	    fi
+	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1300,7 +1284,10 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1324,13 +1311,13 @@ EOF
 	else
 	    UNAME_MACHINE="$cputype"
 	fi
-	echo ${UNAME_MACHINE}-${VENDOR}-plan9
+	echo ${UNAME_MACHINE}-unknown-plan9
 	exit ;;
     *:TOPS-10:*:*)
-	echo pdp10-${VENDOR}-tops10
+	echo pdp10-unknown-tops10
 	exit ;;
     *:TENEX:*:*)
-	echo pdp10-${VENDOR}-tenex
+	echo pdp10-unknown-tenex
 	exit ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
@@ -1339,19 +1326,19 @@ EOF
 	echo pdp10-xkl-tops20
 	exit ;;
     *:TOPS-20:*:*)
-	echo pdp10-${VENDOR}-tops20
+	echo pdp10-unknown-tops20
 	exit ;;
     *:ITS:*:*)
-	echo pdp10-${VENDOR}-its
+	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1369,11 +1356,11 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
@@ -1391,11 +1378,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+	"4"
 #else
-	  ""
+	""
 #endif
-         ); exit (0);
+	); exit (0);
 #endif
 #endif
 
diff --git a/config.h.in b/config.h.in
old mode 100644
new mode 100755
diff --git a/config.rpath b/config.rpath
old mode 100644
new mode 100755
diff --git a/config.sub b/config.sub
index a39437d..9633db7 100755
--- a/config.sub
+++ b/config.sub
@@ -1,44 +1,40 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-#   Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2009-04-17'
+timestamp='2013-08-10'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file 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
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -72,8 +68,7 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -120,13 +115,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -149,10 +149,13 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
+	-apple | -axis | -knuth | -cray | -microblaze*)
 		os=
 		basic_machine=$1
 		;;
+	-bluegene*)
+		os=-cnk
+		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
 		basic_machine=$1
@@ -167,10 +170,10 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -215,6 +218,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -239,20 +248,27 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| arc | arceb \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| be32 | be64 \
 	| bfin \
-	| c4x | clipper \
+	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
 	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | mcore | mep | metag \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -270,32 +286,45 @@ case $basic_machine in
 	| mipsisa64r2 | mipsisa64r2el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
 	| moxie \
 	| mt \
 	| msp430 \
-	| nios | nios2 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
-	| or32 \
+	| open8 \
+	| or1k | or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
+	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu | strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -305,6 +334,21 @@ case $basic_machine in
 		basic_machine=mt-unknown
 		;;
 
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
@@ -319,25 +363,30 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-	| clipper-* | craynv-* | cydra-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
 	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -355,28 +404,34 @@ case $basic_machine in
 	| mipsisa64r2-* | mipsisa64r2el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
-	| nios-* | nios2-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* | nios2eb-* | nios2el-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
-	| v850-* | v850e-* | vax-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
 	| ymp-* \
 	| z8k-* | z80-*)
@@ -401,7 +456,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -467,11 +522,24 @@ case $basic_machine in
 		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
 		os=-linux
 		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
-        cegcc)
+	cegcc)
 		basic_machine=arm-unknown
 		os=-cegcc
 		;;
@@ -503,7 +571,7 @@ case $basic_machine in
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16)
+	cr16 | cr16-*)
 		basic_machine=cr16-unknown
 		os=-elf
 		;;
@@ -661,7 +729,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -719,8 +786,15 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	microblaze*)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
 	mingw32)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-mingw32
 		;;
 	mingw32ce)
@@ -755,10 +829,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i686-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -823,6 +905,12 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -905,9 +993,10 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -932,7 +1021,11 @@ case $basic_machine in
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
-	rdos)
+	rdos | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
 		basic_machine=i386-pc
 		os=-rdos
 		;;
@@ -1001,6 +1094,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -1057,20 +1153,8 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
 	tile*)
-		basic_machine=tile-unknown
+		basic_machine=$basic_machine-unknown
 		os=-linux-gnu
 		;;
 	tx39)
@@ -1140,6 +1224,9 @@ case $basic_machine in
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1237,9 +1324,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1260,22 +1350,23 @@ case $os in
 	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -kopensolaris* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
 	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -openbsd* | -solidbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1283,7 +1374,7 @@ case $os in
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1322,7 +1413,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1371,7 +1462,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1407,15 +1498,14 @@ case $os in
 	-aros*)
 		os=-aros
 		;;
-	-kaos*)
-		os=-kaos
-		;;
 	-zvmoe)
 		os=-zvmoe
 		;;
 	-dicos*)
 		os=-dicos
 		;;
+	-nacl*)
+		;;
 	-none)
 		;;
 	*)
@@ -1438,10 +1528,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+	score-*)
 		os=-elf
 		;;
-        spu-*)
+	spu-*)
 		os=-elf
 		;;
 	*-acorn)
@@ -1453,8 +1543,23 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-        c4x-* | tic4x-*)
-        	os=-coff
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	c8051-*)
+		os=-elf
+		;;
+	hexagon-*)
+		os=-elf
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1474,14 +1579,11 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
-        mep-*)
+	mep-*)
 		os=-elf
 		;;
 	mips*-cisco)
@@ -1490,6 +1592,9 @@ case $basic_machine in
 	mips*-*)
 		os=-elf
 		;;
+	or1k-*)
+		os=-elf
+		;;
 	or32-*)
 		os=-coff
 		;;
@@ -1508,7 +1613,7 @@ case $basic_machine in
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
@@ -1613,7 +1718,7 @@ case $basic_machine in
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
diff --git a/configure b/configure
index eb63ac8..eecf070 100755
--- a/configure
+++ b/configure
@@ -1,8 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for 3Depict 0.0.14.
-#
-# Report bugs to <mycae at yahoo.com>.
+# Generated by GNU Autoconf 2.69 for 3Depict 0.0.15.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -266,11 +264,10 @@ fi
     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf at gnu.org and mycae at yahoo.com
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
+    $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
   fi
   exit 1
 fi
@@ -580,9 +577,9 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='3Depict'
 PACKAGE_TARNAME='3depict'
-PACKAGE_VERSION='0.0.14'
-PACKAGE_STRING='3Depict 0.0.14'
-PACKAGE_BUGREPORT='mycae at yahoo.com'
+PACKAGE_VERSION='0.0.15'
+PACKAGE_STRING='3Depict 0.0.15'
+PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
 # Factoring default headers for most tests.
@@ -700,6 +697,10 @@ CPPFLAGS
 LDFLAGS
 CXXFLAGS
 CXX
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 am__untar
 am__tar
 AMTAR
@@ -766,6 +767,7 @@ ac_user_opts='
 enable_option_checking
 with_ftgl_prefix
 with_ftgl_no_pkg
+enable_silent_rules
 enable_dependency_tracking
 with_wxdir
 with_wx_config
@@ -1349,7 +1351,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures 3Depict 0.0.14 to adapt to many kinds of systems.
+\`configure' configures 3Depict 0.0.15 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1419,7 +1421,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of 3Depict 0.0.14:";;
+     short | recursive ) echo "Configuration of 3Depict 0.0.15:";;
    esac
   cat <<\_ACEOF
 
@@ -1427,8 +1429,12 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --enable-mgl2 Enable mathgl 2.x support
   --disable-gsltest       Do not try to compile and run a test GSL program
   --enable-openmp-parallel  Enable OpenMP multi-CPU usage; requires GCC > 4.2 for parallel STL support
@@ -1483,7 +1489,7 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to <mycae at yahoo.com>.
+Report bugs to the package provider.
 _ACEOF
 ac_status=$?
 fi
@@ -1546,7 +1552,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-3Depict configure 0.0.14
+3Depict configure 0.0.15
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1999,10 +2005,6 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------ ##
-## Report this to mycae at yahoo.com ##
-## ------------------------------ ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -2173,10 +2175,6 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------ ##
-## Report this to mycae at yahoo.com ##
-## ------------------------------ ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -2364,7 +2362,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by 3Depict $as_me 0.0.14, which was
+It was created by 3Depict $as_me 0.0.15, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2712,7 +2710,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-am__api_version='1.11'
+am__api_version='1.14'
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2838,9 +2836,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -2851,32 +2846,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$2" = conftest.file
    )
 then
@@ -2888,6 +2891,16 @@ Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
@@ -2910,12 +2923,12 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh}" != xset; then
@@ -2927,10 +2940,10 @@ if test x"${install_sh}" != xset; then
   esac
 fi
 
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
+# will honor the 'STRIP' environment variable to overrule this program.
 if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
@@ -3069,12 +3082,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -3157,6 +3164,45 @@ else
 fi
 rmdir .tst 2>/dev/null
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 if test "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
@@ -3179,7 +3225,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='3depict'
- VERSION='0.0.14'
+ VERSION='0.0.15'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3207,18 +3253,70 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
 
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
 am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
 
 
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3744,7 +3842,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -3800,8 +3898,8 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -3836,16 +3934,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -3854,8 +3952,8 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
@@ -3863,7 +3961,7 @@ else
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -4456,6 +4554,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
@@ -4467,8 +4624,8 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
   rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
@@ -4503,16 +4660,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -4521,8 +4678,8 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
 	continue
       else
@@ -4530,7 +4687,7 @@ else
       fi
       ;;
     msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -5382,14 +5539,6 @@ as_fn_error $? "
 " "$LINENO" 5
 fi
 
- if which ${host_os}windres > /dev/null && which windres >> /dev/null; then
-  HAVE_WINDRES_TRUE=
-  HAVE_WINDRES_FALSE='#'
-else
-  HAVE_WINDRES_TRUE='#'
-  HAVE_WINDRES_FALSE=
-fi
-
 
 #Append the --gl-libs flag
 WX_LIBS="$WX_LIBS `$WX_CONFIG_PATH --gl-libs`"
@@ -5400,8 +5549,24 @@ case "${host_os}" in
 		# Manually append -DUNICODE to cppflags/cxxflags
 		WX_CXXFLAGS="$WX_CXXFLAGS -DUNICODE"
 		WX_CPPFLAGS="$WX_CPPFLAGS -DUNICODE"
+		 if test 1 ; then
+  HAVE_WINDRES_TRUE=
+  HAVE_WINDRES_FALSE='#'
+else
+  HAVE_WINDRES_TRUE='#'
+  HAVE_WINDRES_FALSE=
+fi
+
 		;;
 	*)
+		 if  FALSE  ; then
+  HAVE_WINDRES_TRUE=
+  HAVE_WINDRES_FALSE='#'
+else
+  HAVE_WINDRES_TRUE='#'
+  HAVE_WINDRES_FALSE=
+fi
+
 	;;
 esac
 
@@ -6685,11 +6850,9 @@ $as_echo "#define USE_MGL2 1 " >>confdefs.h
 fi
 
 case "${host_os}" in
-	darwin*)
-		;;
 	mingw*|windows*|winnt)
 		;;
-	linux*)
+	linux*|darwin*)
 		#if enable mgl2, substitute header
 		if test -z "${enable_mgl2}"  ; then
 				{ $as_echo "$as_me:${as_lineno-$LINENO}: result: \"mathgl check: assuming mathgl 1.x\"" >&5
@@ -7498,6 +7661,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -7526,6 +7697,10 @@ if test -z "${HAVE_WINDRES_TRUE}" && test -z "${HAVE_WINDRES_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_WINDRES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_WINDRES_TRUE}" && test -z "${HAVE_WINDRES_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_WINDRES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_XML_TRUE}" && test -z "${USE_XML_FALSE}"; then
   as_fn_error $? "conditional \"USE_XML\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -7927,7 +8102,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by 3Depict $as_me 0.0.14, which was
+This file was extended by 3Depict $as_me 0.0.15, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -7987,13 +8162,13 @@ $config_headers
 Configuration commands:
 $config_commands
 
-Report bugs to <mycae at yahoo.com>."
+Report bugs to the package provider."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-3Depict config.status 0.0.14
+3Depict config.status 0.0.15
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -8722,7 +8897,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
   case $ac_file$ac_mode in
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -8735,7 +8910,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -8769,21 +8944,19 @@ $as_echo X"$mf" |
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`$as_dirname -- "$file" ||
diff --git a/configure.ac b/configure.ac
index a482567..cb6d279 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
-AC_INIT([3Depict], [0.0.14], [mycae at yahoo.com])
-AM_INIT_AUTOMAKE([foreign])
+AC_INIT([3Depict], [0.0.15]) 
+AM_INIT_AUTOMAKE([foreign subdir-objects])
 AC_PROG_CXX
 AC_PROG_CC
 AC_CONFIG_HEADERS([config.h])
@@ -32,7 +32,6 @@ AC_MSG_ERROR([
 ])
 fi
 
-AM_CONDITIONAL(HAVE_WINDRES, which ${host_os}windres > /dev/null && which windres >> /dev/null)
 
 #Append the --gl-libs flag
 WX_LIBS="$WX_LIBS `$WX_CONFIG_PATH --gl-libs`"
@@ -43,8 +42,10 @@ case "${host_os}" in
 		# Manually append -DUNICODE to cppflags/cxxflags
 		WX_CXXFLAGS="$WX_CXXFLAGS -DUNICODE"
 		WX_CPPFLAGS="$WX_CPPFLAGS -DUNICODE"
+		AM_CONDITIONAL([HAVE_WINDRES], [test 1] )
 		;;
 	*)
+		AM_CONDITIONAL([HAVE_WINDRES], [ FALSE ] )
 	;;
 esac
 
@@ -312,11 +313,9 @@ if test x"${enable_mgl2}" == x"yes" ; then
 fi
 
 case "${host_os}" in
-	darwin*)
-		;;
 	mingw*|windows*|winnt)
 		;;
-	linux*)
+	linux*|darwin*)
 		#if enable mgl2, substitute header
 		if test -z "${enable_mgl2}"  ; then
 				AC_MSG_RESULT(["mathgl check: assuming mathgl 1.x"])
diff --git a/data/atomic-mass-table.dtd b/data/atomic-mass-table.dtd
new file mode 100644
index 0000000..488ed36
--- /dev/null
+++ b/data/atomic-mass-table.dtd
@@ -0,0 +1,56 @@
+<!--
+ * Copyright (C) 2013  D Haley
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<!-- This is a DTD for the natural abundance data file -->
+<!--root node -->
+<!ELEMENT atomic-mass-table (entry*) >
+<!-- natural abundance data node, used to encapsulate mass/fraction data--> 
+<!ELEMENT entry (natural-abundance*) > 
+
+<!ELEMENT natural-abundance (mass,isotope+) > 
+<!ELEMENT isotope (mass,abundance) > 
+
+<!ELEMENT mass EMPTY>
+<!ELEMENT abundance EMPTY>
+
+
+
+<!-- Mass units must be in unified atomic mass units, with value "u"
+	this option exists to hypothetically add support to other systems
+	at some later time. -->
+<!ATTLIST atomic-mass-table mass-units CDATA #REQUIRED>
+<!-- Abundance units must be in "Mole Fraction" -->
+<!ATTLIST atomic-mass-table abundance-units CDATA #REQUIRED>
+<!-- Symbol for element, eg hydrogen would be "H", helium "He" and so on-->
+<!ATTLIST entry symbol CDATA #REQUIRED>
+<!-- Atomic number for element, integer -->
+<!ATTLIST entry atomic-number CDATA #REQUIRED>
+<!-- Mass value for element/isotope, in units that are specified in atomic-mass-table: 
+	* From element, computed by A_r = \frac{\sigma m_i x_i}{\sigma x_i},
+	  where xi are the isotope natural abundances, and m_i are
+	  the isotopes
+	* When used in an isotope , for the specific isotope 
+	-->
+<!ATTLIST mass value CDATA #REQUIRED>
+<!-- Mass error for element - the exact statistical meaning of this value is not specified here --> 
+<!ATTLIST mass error CDATA #REQUIRED>
+<!-- Typical natural abundance value (0,1], for the reported isotope -->
+<!ATTLIST abundance value CDATA #REQUIRED>
+<!-- Abundance error - should be taken with a pinch of salt, as abundance values can change by material origin-->
+<!ATTLIST abundance error CDATA #REQUIRED>
+
+<!ATTLIST isotope mass-number CDATA #REQUIRED>
diff --git a/data/naturalAbundance.xml b/data/naturalAbundance.xml
new file mode 100644
index 0000000..7a371b0
--- /dev/null
+++ b/data/naturalAbundance.xml
@@ -0,0 +1,1608 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE atomic-mass-table SYSTEM "atomic-mass-table.dtd">
+
+<!--
+MX Cheminformatics Tools for Java
+
+Copyright (c) 2007, 2008 Metamolecular, LLC
+http://metamolecular.com
+
+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 OR COPYRIGHT HOLDERS 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.
+-->
+
+<!--
+This system of atomic masses is quoted from:
+
+de Laeter, J.R.; Boehlke, J.K.; de Bievre, P.; Hidaka, H.; Peiser, H.S.; Rosman, K.J.R.;
+Taylor, P.D.P. Atomic Weights of the Elements: Review 2000 (IUPAC Technical Report)
+Pure Appl. Chem. 2003, 75, 683-800.
+
+http://www.iupac.org/publications/pac/2003/7506/7506x0683.html
+-->
+
+<atomic-mass-table mass-units="u" abundance-units="Mole Fraction">
+  <entry symbol="H" atomic-number="1">
+    <natural-abundance>
+      <mass value="1.00794" error="0.00007"/>
+      <isotope mass-number="1">
+        <mass value="1.0078250319" error="0.00000000006"/>
+        <abundance value="0.999885" error="0.000070"/>
+      </isotope>
+      <isotope mass-number="2">
+        <mass value="2.0141017779" error="0.0000000006"/>
+       <abundance value="0.000115" error="0.000070"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="He" atomic-number="2">
+    <natural-abundance>
+      <mass value="4.002602" error="0.000002"/>
+      <isotope mass-number="3">
+        <mass value="3.0160293094" error="0.0000000012"/>
+        <abundance value="0.00000134" error="0.00000003"/>
+      </isotope>
+      <isotope mass-number="4">
+        <mass value="4.0026032497" error="0.0000000015"/>
+        <abundance value="0.99999866" error="0.00000003"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Li" atomic-number="3">
+    <natural-abundance>
+      <mass value="6.9421" error="0.002"/>
+      <isotope mass-number="3">
+        <mass value="6.0151223" error="0.0000005"/>
+        <abundance value="0.0759" error="0.0004"/>
+      </isotope>
+      <isotope mass-number="7">
+        <mass value="7.0160041" error="0.0000005"/>
+        <abundance value="0.9241" error="0.0004"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Be" atomic-number="4">
+    <natural-abundance>
+      <mass value="9.012182" error="0.000003"/>
+      <isotope mass-number="9">
+        <mass value="9.0121822" error="0.0000004"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="B" atomic-number="5">
+    <natural-abundance>
+      <mass value="10.881" error="0.007"/>
+      <isotope mass-number="10">
+        <mass value="10.0129371" error="0.0000003"/>
+        <abundance value="0.199" error="0.007"/>
+      </isotope>
+      <isotope mass-number="11">
+        <mass value="11.0093055" error="0.0000004"/>
+        <abundance value="0.801" error="0.007"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="C" atomic-number="6">
+    <natural-abundance>
+      <mass value="12.0107" error="0.0008"/>
+      <isotope mass-number="12">
+        <mass value="12" error="0"/>
+        <abundance value="0.9893" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="13">
+        <mass value="13.003354838" error="0.000000005"/>
+        <abundance value="0.0107" error="0.0008"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="N" atomic-number="7">
+    <natural-abundance>
+      <mass value="14.0067" error="0.0002"/>
+      <isotope mass-number="14">
+        <mass value="14.0030740074" error="0.0000000018"/>
+        <abundance value="0.99636" error="0.00020"/>
+      </isotope>
+      <isotope mass-number="15">
+        <mass value="15.000108973" error="0.000000012"/>
+        <abundance value="0.00364" error="0.00020"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="O" atomic-number="8">
+    <natural-abundance>
+      <mass value="15.9994" error="0.0003"/>
+      <isotope mass-number="16">
+        <mass value="15.9949146223" error="0.0000000025"/>
+        <abundance value="0.99759" error="0.00016"/>
+      </isotope>
+      <isotope mass-number="17">
+        <mass value="16.99913150" error="0.00000022"/>
+        <abundance value="0.00038" error="0.00001"/>
+      </isotope>
+      <isotope mass-number="18">
+        <mass value="17.9991604" error="0.0000009"/>
+        <abundance value="0.00205" error="0.00014"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="F" atomic-number="9">
+    <natural-abundance>
+      <mass value="18.9984032" error="0.0000005"/>
+      <isotope mass-number="19">
+        <mass value="18.99840320" error="0.00000007"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ne" atomic-number="10">
+    <natural-abundance>
+      <mass value="20.1797" error="0.0006"/>
+      <isotope mass-number="20">
+        <mass value="19.992440176" error="0.000000003"/>
+        <abundance value="0.9048" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="21">
+        <mass value="20.99384674" error="0.00000004"/>
+        <abundance value="0.0027" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="22">
+        <mass value="21.99138550" error="0.00000025"/>
+        <abundance value="0.0925" error="0.0003"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Na" atomic-number="11">
+    <natural-abundance>
+      <mass value="22.989770" error="0.000002"/>
+      <isotope mass-number="23">
+        <mass value="22.98976966" error="0.00000026"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Mg" atomic-number="12">
+    <natural-abundance>
+      <mass value="24.3050" error="0.0006"/>
+      <isotope mass-number="24">
+        <mass value="23.98504187" error="0.00000026"/>
+        <abundance value="0.7899" error="0.0004"/>
+      </isotope>
+      <isotope mass-number="25">
+        <mass value="24.98583700" error="0.00000026"/>
+        <abundance value="0.1000" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="26">
+        <mass value="25.98259300" error="0.00000026"/>
+        <abundance value="0.1101" error="0.0003"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Al" atomic-number="13">
+    <natural-abundance>
+      <mass value="26.981538" error="0.000002"/>
+      <isotope mass-number="27">
+        <mass value="26.98153841" error="0.00000024"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Si" atomic-number="14">
+    <natural-abundance>
+      <mass value="28.0855" error="0.0003"/>
+      <isotope mass-number="28">
+        <mass value="27.97692649" error="0.00000022"/>
+        <abundance value="0.92223" error="0.00019"/>
+      </isotope>
+      <isotope mass-number="29">
+        <mass value="28.97649468" error="0.00000022"/>
+        <abundance value="0.04685" error="0.00008"/>
+      </isotope>
+      <isotope mass-number="30">
+        <mass value="29.97377018" error="0.00000022"/>
+        <abundance value="0.03092" error="0.00011"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="P" atomic-number="15">
+    <natural-abundance>
+      <mass value="30.973761" error="0.000002"/>
+      <isotope mass-number="31">
+        <mass value="30.97376149" error="0.00000027"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="S" atomic-number="16">
+    <natural-abundance>
+      <mass value="32.065" error="0.005"/>
+      <isotope mass-number="32">
+        <mass value="31.97207073" error="0.00000015"/>
+        <abundance value="0.9499" error="0.0026"/>
+      </isotope>
+      <isotope mass-number="33">
+        <mass value="32.97145854" error="0.00000015"/>
+        <abundance value="0.0075" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="34">
+        <mass value="33.96786687" error="0.00000014"/>
+        <abundance value="0.0425" error="0.0024"/>
+      </isotope>
+      <isotope mass-number="36">
+        <mass value="35.96708088" error="0.00000025"/>
+        <abundance value="0.0001" error="0.0001"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Cl" atomic-number="17">
+    <natural-abundance>
+      <mass value="35.453" error="0.002"/>
+      <isotope mass-number="35">
+        <mass value="34.96885271" error="0.00000004"/>
+        <abundance value="0.7576" error="0.0010"/>
+      </isotope>
+      <isotope mass-number="37">
+        <mass value="36.96590260" error="0.00000005"/>
+        <abundance value="0.2424" error="0.0010"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ar" atomic-number="18">
+    <natural-abundance>
+      <mass value="39.948" error="0.001"/>
+      <isotope mass-number="36">
+        <mass value="35.96754626" error="0.00000027"/>
+        <abundance value="0.0003365" error="0.000030"/>
+      </isotope>
+      <isotope mass-number="38">
+        <mass value="37.9627322" error="0.0000005"/>
+        <abundance value="0.000632" error="0.000005"/>
+      </isotope>
+      <isotope mass-number="40">
+        <mass value="39.962383124" error="0.000000005"/>
+        <abundance value="0.996003" error="0.000030"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="K" atomic-number="19">
+    <natural-abundance>
+      <mass value="39.0983" error="0.0001"/>
+      <isotope mass-number="39">
+        <mass value="38.9637069" error="0.0000003"/>
+        <abundance value="0.932581" error="0.000044"/>
+      </isotope>
+      <isotope mass-number="40">
+        <mass value="39.96399867" error="0.00000029"/>
+        <abundance value="0.000117" error="0.000001"/>
+      </isotope>
+      <isotope mass-number="41">
+        <mass value="40.96182597" error="0.00000028"/>
+        <abundance value="0.067302" error="0.000044"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ca" atomic-number="20">
+    <natural-abundance>
+      <mass value="40.078" error="0.004"/>
+      <isotope mass-number="40">
+        <mass value="39.9625912" error="0.0000003"/>
+        <abundance value="0.96941" error="0.00156"/>
+      </isotope>
+      <isotope mass-number="42">
+        <mass value="41.9586183" error="0.0000004"/>
+        <abundance value="0.00647" error="0.00023"/>
+      </isotope>
+      <isotope mass-number="43">
+        <mass value="42.9587668" error="0.0000005"/>
+        <abundance value="0.00135" error="0.00010"/>
+      </isotope>
+      <isotope mass-number="44">
+        <mass value="43.9554811" error="0.0000009"/>
+        <abundance value="0.02086" error="0.00110"/>
+      </isotope>
+      <isotope mass-number="46">
+        <mass value="45.9536927" error="0.0000025"/>
+        <abundance value="0.00004" error="0.00003"/>
+      </isotope>
+      <isotope mass-number="48">
+        <mass value="47.952533" error="0.000004"/>
+        <abundance value="0.00187" error="0.00021"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Sc" atomic-number="21">
+    <natural-abundance>
+      <mass value="44.955910" error="0.000008"/>
+      <isotope mass-number="45">
+        <mass value="44.9559102" error="0.0000012"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ti" atomic-number="22">
+    <natural-abundance>
+      <mass value="47.867" error="0.001"/>
+      <isotope mass-number="46">
+        <mass value="45.9526295" error="0.0000012"/>
+        <abundance value="0.0825" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="47">
+        <mass value="46.9517637" error="0.0000010"/>
+        <abundance value="0.0744" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="48">
+        <mass value="47.9479470" error="0.0000010"/>
+        <abundance value="0.7372" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="49">
+        <mass value="48.9478707" error="0.0000010"/>
+        <abundance value="0.0541" error="0.0002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="V" atomic-number="23">
+    <natural-abundance>
+      <mass value="50.9415" error="0.0001"/>
+      <isotope mass-number="50">
+        <mass value="49.9471627" error="0.0000014"/>
+        <abundance value="0.00250" error="0.00004"/>
+      </isotope>
+      <isotope mass-number="51">
+        <mass value="50.9439635" error="0.0000014"/>
+        <abundance value="0.99750" error="0.00004"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Cr" atomic-number="24">
+    <natural-abundance>
+      <mass value="51.9961" error="0.0006"/>
+      <isotope mass-number="50">
+        <mass value="49.9460495" error="0.0000014"/>
+        <abundance value="0.04345" error="0.00013"/>
+      </isotope>
+      <isotope mass-number="52">
+        <mass value="51.9405115" error="0.0000015"/>
+        <abundance value="0.83789" error="0.00018"/>
+      </isotope>
+      <isotope mass-number="53">
+        <mass value="52.9406534" error="0.0000015"/>
+        <abundance value="0.09501" error="0.00017"/>
+      </isotope>
+      <isotope mass-number="54">
+        <mass value="53.938846" error="0.0000015"/>
+        <abundance value="0.02365" error="0.00007"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Mn" atomic-number="25">
+    <natural-abundance>
+      <mass value="54.938049" error="0.000009"/>
+      <isotope mass-number="55">
+        <mass value="54.9380493" error="0.0000015"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Fe" atomic-number="26">
+    <natural-abundance>
+      <mass value="55.845" error="0.002"/>
+      <isotope mass-number="54">
+        <mass value="53.9396147" error="0.0000014"/>
+        <abundance value="0.05845" error="0.00035"/>
+      </isotope>
+      <isotope mass-number="56">
+        <mass value="55.9349418" error="0.0000015"/>
+        <abundance value="0.91754" error="0.00036"/>
+      </isotope>
+      <isotope mass-number="57">
+        <mass value="56.9353983" error="0.0000015"/>
+        <abundance value="0.02119" error="0.00010"/>
+      </isotope>
+      <isotope mass-number="58">
+        <mass value="57.9332801" error="0.0000015"/>
+        <abundance value="0.00282" error="0.00004"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Co" atomic-number="27">
+    <natural-abundance>
+      <mass value="58.933200" error="0.000009"/>
+      <isotope mass-number="59">
+        <mass value="59.9331999" error="0.0000015"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ni" atomic-number="28">
+    <natural-abundance>
+      <mass value="58.6934" error="0.0002"/>
+      <isotope mass-number="58">
+        <mass value="57.9353477" error="0.0000016"/>
+        <abundance value="0.680769" error="0.000089"/>
+      </isotope>
+      <isotope mass-number="60">
+        <mass value="59.9307903" error="0.0000015"/>
+        <abundance value="0.262231" error="0.000077"/>
+      </isotope>
+      <isotope mass-number="61">
+        <mass value="60.9310601" error="0.0000015"/>
+        <abundance value="0.011399" error="0.000006"/>
+      </isotope>
+      <isotope mass-number="62">
+        <mass value="61.9283484" error="0.0000015"/>
+        <abundance value="0.0036345" error="0.000017"/>
+      </isotope>
+      <isotope mass-number="64">
+        <mass value="63.9279692" error="0.0000016"/>
+        <abundance value="0.009256" error="0.000009"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Cu" atomic-number="29">
+    <natural-abundance>
+      <mass value="63.546" error="0.003"/>
+      <isotope mass-number="63">
+        <mass value="62.9296007" error="0.0000015"/>
+        <abundance value="0.6915" error="0.0015"/>
+      </isotope>
+      <isotope mass-number="65">
+        <mass value="64.9277938" error="0.0000019"/>
+        <abundance value="0.3085" error="0.0015"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Zn" atomic-number="30">
+    <natural-abundance>
+      <mass value="65.409" error="0.004"/>
+      <isotope mass-number="64">
+        <mass value="63.9291461" error="0.0000018"/>
+        <abundance value="0.48268" error="0.00321"/>
+      </isotope>
+      <isotope mass-number="66">
+        <mass value="65.9260364" error="0.0000017"/>
+        <abundance value="0.27975" error="0.00077"/>
+      </isotope>
+      <isotope mass-number="67">
+        <mass value="66.9271305" error="0.0000017"/>
+        <abundance value="0.04102" error="0.00021"/>
+      </isotope>
+      <isotope mass-number="68">
+        <mass value="67.9248473" error="0.0000017"/>
+        <abundance value="0.19024" error="0.00123"/>
+      </isotope>
+      <isotope mass-number="70">
+        <mass value="69.925325" error="0.000004"/>
+        <abundance value="0.00631" error="0.00009"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ga" atomic-number="31">
+    <natural-abundance>
+      <mass value="69.723" error="0.001"/>
+      <isotope mass-number="69">
+        <mass value="68.925581" error="0.000003"/>
+        <abundance value="0.60108" error="0.00009"/>
+      </isotope>
+      <isotope mass-number="71">
+        <mass value="70.9247073" error="0.0000020"/>
+        <abundance value="0.39892" error="0.00009"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ge" atomic-number="32">
+    <natural-abundance>
+      <mass value="72.64" error="0.01"/>
+      <isotope mass-number="70">
+        <mass value="69.9242500" error="0.0000019"/>
+        <abundance value="0.2038" error="0.0018"/>
+      </isotope>
+      <isotope mass-number="72">
+        <mass value="71.9220763" error="0.0000016"/>
+        <abundance value="0.2731" error="0.0026"/>
+      </isotope>
+      <isotope mass-number="73">
+        <mass value="72.9234595" error="0.0000016"/>
+        <abundance value="0.0776" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="74">
+        <mass value="73.9211784" error="0.0000016"/>
+        <abundance value="0.3672" error="0.0015"/>
+      </isotope>
+      <isotope mass-number="76">
+        <mass value="75.9214029" error="0.0000016"/>
+        <abundance value="0.0783" error="0.0007"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="As" atomic-number="33">
+    <natural-abundance>
+      <mass value="74.92160" error="0.00002"/>
+      <isotope mass-number="75">
+        <mass value="74.9215966" error="0.0000018"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Se" atomic-number="34">
+    <natural-abundance>
+      <mass value="78.96" error="0.03"/>
+      <isotope mass-number="74">
+        <mass value="73.9224767" error="0.0000016"/>
+        <abundance value="0.0089" error="0.0004"/>
+      </isotope>
+      <isotope mass-number="76">
+        <mass value="75.9192143" error="0.0000016"/>
+        <abundance value="0.0937" error="0.0029"/>
+      </isotope>
+      <isotope mass-number="77">
+        <mass value="76.9199148" error="0.0000016"/>
+        <abundance value="0.0763" error="0.0016"/>
+      </isotope>
+      <isotope mass-number="78">
+        <mass value="77.9173097" error="0.0000016"/>
+        <abundance value="0.2377" error="0.0028"/>
+      </isotope>
+      <isotope mass-number="80">
+        <mass value="79.9165221" error="0.0000020"/>
+        <abundance value="0.4961" error="0.0041"/>
+      </isotope>
+      <isotope mass-number="82">
+        <mass value="81.9167003" error="0.0000022"/>
+        <abundance value="0.0873" error="0.0022"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Br" atomic-number="35">
+    <natural-abundance>
+      <mass value="79.904" error="0.001"/>
+      <isotope mass-number="79">
+        <mass value="78.9183379" error="0.0000020"/>
+        <abundance value="0.5069" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="81">
+        <mass value="80.916291" error="0.000003"/>
+        <abundance value="0.4931" error="0.0007"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Kr" atomic-number="36">
+    <natural-abundance>
+      <mass value="83.798" error="0.002"/>
+      <isotope mass-number="78">
+        <mass value="77.920388" error="0.000007"/>
+        <abundance value="0.00355" error="0.00003"/>
+      </isotope>
+      <isotope mass-number="80">
+        <mass value="79.916379" error="0.000004"/>
+        <abundance value="0.02286" error="0.00010"/>
+      </isotope>
+      <isotope mass-number="82">
+        <mass value="81.9134850" error="0.0000028"/>
+        <abundance value="0.11593" error="0.00031"/>
+      </isotope>
+      <isotope mass-number="83">
+        <mass value="82.914137" error="0.000004"/>
+        <abundance value="0.11500" error="0.00019"/>
+      </isotope>
+      <isotope mass-number="84">
+        <mass value="83.911508" error="0.000003"/>
+        <abundance value="0.56987" error="0.00015"/>
+      </isotope>
+      <isotope mass-number="86">
+        <mass value="85.910615" error="0.000005"/>
+        <abundance value="0.17279" error="0.00041"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Rb" atomic-number="37">
+    <natural-abundance>
+      <mass value="85.4678" error="0.0003"/>
+      <isotope mass-number="85">
+        <mass value="84.9117924" error="0.0000027"/>
+        <abundance value="0.7217" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="87">
+        <mass value="86.9091858" error="0.0000028"/>
+        <abundance value="0.2783" error="0.0002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Sr" atomic-number="38">
+    <natural-abundance>
+      <mass value="87.62" error="0.01"/>
+      <isotope mass-number="84">
+        <mass value="83.913426" error="0.000004"/>
+        <abundance value="0.0056" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="86">
+        <mass value="85.9092647" error="0.0000025"/>
+        <abundance value="0.0986" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="87">
+        <mass value="86.9088816" error="0.0000025"/>
+        <abundance value="0.0700" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="88">
+        <mass value="87.9056167" error="0.0000025"/>
+        <abundance value="0.8258" error="0.0001"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Y" atomic-number="39">
+    <natural-abundance>
+      <mass value="88.90585" error="0.00002"/>
+      <isotope mass-number="89">
+        <mass value="88.9058485" error="0.0000026"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Zr" atomic-number="40">
+    <natural-abundance>
+      <mass value="91.224" error="0.002"/>
+      <isotope mass-number="90">
+        <mass value="89.9047022" error="0.0000024"/>
+        <abundance value="0.5145" error="0.0040"/>
+      </isotope>
+      <isotope mass-number="91">
+        <mass value="90.9056434" error="0.0000023"/>
+        <abundance value="0.1122" error="0.0005"/>
+      </isotope>
+      <isotope mass-number="92">
+        <mass value="91.9050386" error="0.0000023"/>
+        <abundance value="0.1715" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="94">
+        <mass value="93.9063144" error="0.0000026"/>
+        <abundance value="0.1738" error="0.0028"/>
+      </isotope>
+      <isotope mass-number="96">
+        <mass value="95.908275" error="0.000003"/>
+        <abundance value="0.0280" error="0.0009"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Nb" atomic-number="41">
+    <natural-abundance>
+      <mass value="92.90638" error="0.00002"/>
+      <isotope mass-number="93">
+        <mass value="92.9063762" error="0.0000024"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Mo" atomic-number="42">
+    <natural-abundance>
+      <mass value="95.94" error="0.02"/>
+      <isotope mass-number="92">
+        <mass value="91.906810" error="0.000004"/>
+        <abundance value="0.1477" error="0.0031"/>
+      </isotope>
+      <isotope mass-number="94">
+        <mass value="93.9050867" error="0.0000020"/>
+        <abundance value="0.0923" error="0.0010"/>
+      </isotope>
+      <isotope mass-number="95">
+        <mass value="94.9058406" error="0.0000020"/>
+        <abundance value="0.1590" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="96">
+        <mass value="95.9046780" error="0.0000020"/>
+        <abundance value="0.1668" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="97">
+        <mass value="96.9030201" error="0.0000020"/>
+        <abundance value="0.0956" error="0.0005"/>
+      </isotope>
+      <isotope mass-number="98">
+        <mass value="97.9054069" error="0.0000020"/>
+        <abundance value="0.2419" error="0.0026"/>
+      </isotope>
+      <isotope mass-number="100">
+        <mass value="99.907476" error="0.000006"/>
+        <abundance value="0.0967" error="0.0020"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ru" atomic-number="44">
+    <natural-abundance>
+      <mass value="101.07" error="0.02"/>
+      <isotope mass-number="96">
+        <mass value="95.907604" error="0.000009"/>
+        <abundance value="0.0554" error="0.0014"/>
+      </isotope>
+      <isotope mass-number="98">
+        <mass value="97.905287" error="0.000007"/>
+        <abundance value="0.0187" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="99">
+        <mass value="98.9059385" error="0.0000022"/>
+        <abundance value=".01276" error="0.0014"/>
+      </isotope>
+      <isotope mass-number="100">
+        <mass value="99.9042189" error="0.0000022"/>
+        <abundance value="0.1260" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="101">
+        <mass value="100.9055815" error="0.0000022"/>
+        <abundance value="0.1706" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="102">
+        <mass value="101.9043488" error="0.0000022"/>
+        <abundance value="0.3155" error="0.0014"/>
+      </isotope>
+      <isotope mass-number="104">
+        <mass value="103.905430" error=".01862"/>
+        <abundance value="0.1862" error="0.0027"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Rh" atomic-number="45">
+    <natural-abundance>
+      <mass value="1025.90550" error="0.00002"/>
+      <isotope mass-number="103">
+        <mass value="102.905504" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Pd" atomic-number="46">
+    <natural-abundance>
+      <mass value="106.42" error="0.01"/>
+      <isotope mass-number="102">
+        <mass value="101.905607" error="0.000003"/>
+        <abundance value="0.0102" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="104">
+        <mass value="103.904034" error="0.000005"/>
+        <abundance value="0.1114" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="105">
+        <mass value="104.905083" error="0.000005"/>
+        <abundance value="0.2233" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="106">
+        <mass value="105.903484" error="0.000005"/>
+        <abundance value="0.2733" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="108">
+        <mass value="107.903895" error="0.000004"/>
+        <abundance value="0.2646" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="110">
+        <mass value="109.905153" error="0.000012"/>
+        <abundance value="0.1172" error="0.0009"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ag" atomic-number="47">
+    <natural-abundance>
+      <mass value="107.8682" error="0.0002"/>
+      <isotope mass-number="107">
+        <mass value="106.905093" error="0.000006"/>
+        <abundance value="0.51839" error="0.00008"/>
+      </isotope>
+      <isotope mass-number="109">
+        <mass value="108.904756" error="0.000003"/>
+        <abundance value="0.48161" error="0.00008"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Cd" atomic-number="48">
+    <natural-abundance>
+      <mass value="112.411" error="0.008"/>
+      <isotope mass-number="106">
+        <mass value="105.906458" error="0.000006"/>
+        <abundance value="0.0125" error="0.0006"/>
+      </isotope>
+      <isotope mass-number="108">
+        <mass value="107.904183" error="0.000006"/>
+        <abundance value="0.0089" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="110">
+        <mass value="109.903006" error="0.000003"/>
+        <abundance value="0.1249" error="0.0018"/>
+      </isotope>
+      <isotope mass-number="111">
+        <mass value="110.904182" error="0.000003"/>
+        <abundance value="0.1280" error="0.0012"/>
+      </isotope>
+      <isotope mass-number="112">
+        <mass value="111.9027577" error="0.0000030"/>
+        <abundance value="0.2413" error="0.0021"/>
+      </isotope>
+      <isotope mass-number="113">
+        <mass value="112.9044014" error="0.0000030"/>
+        <abundance value="0.1222" error="0.0012"/>
+      </isotope>
+      <isotope mass-number="114">
+        <mass value="113.9033586" error="0.0000030"/>
+        <abundance value="0.2873" error="0.0042"/>
+      </isotope>
+      <isotope mass-number="116">
+        <mass value="115.904756" error="0.000003"/>
+        <abundance value="0.0749" error="0.0018"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="In" atomic-number="49">
+    <natural-abundance>
+      <mass value="114.818" error="0.003"/>
+      <isotope mass-number="113">
+        <mass value="112.904062" error="0.000004"/>
+        <abundance value="0.0429" error="0.0005"/>
+      </isotope>
+      <isotope mass-number="115">
+        <mass value="114.903879" error="0.000040"/>
+        <abundance value="0.9571" error="0.0005"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Sn" atomic-number="50">
+    <natural-abundance>
+      <mass value="118.710" error="0.007"/>
+      <isotope mass-number="112">
+        <mass value="111.904822" error="0.000005"/>
+        <abundance value="0.0097" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="114">
+        <mass value="113.902783" error="0.000003"/>
+        <abundance value="0.0066" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="115">
+        <mass value="114.903347" error="0.000003"/>
+        <abundance value="0.0034" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="116">
+        <mass value="115.901745" error="0.000003"/>
+        <abundance value="0.1454" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="117">
+        <mass value="116.902955" error="0.000003"/>
+        <abundance value="0.0768" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="118">
+        <mass value="117.901608" error="0.000003"/>
+        <abundance value="0.2422" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="119">
+        <mass value="118.903311" error="0.000003"/>
+        <abundance value="0.0859" error="0.0004"/>
+      </isotope>
+      <isotope mass-number="120">
+        <mass value="119.9021985" error="0.0000027"/>
+        <abundance value="0.3258" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="122">
+        <mass value="121.9034411" error="0.0000029"/>
+        <abundance value="0.0463" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="124">
+        <mass value="123.9052745" error="0.0000015"/>
+        <abundance value="0.0579" error="0.0005"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Sb" atomic-number="51">
+    <natural-abundance>
+      <mass value="121.760" error="0.001"/>
+      <isotope mass-number="121">
+        <mass value="120.9038222" error="0.0000026"/>
+        <abundance value="0.5721" error="0.0005"/>
+      </isotope>
+      <isotope mass-number="123">
+        <mass value="122.9042160" error="0.0000022"/>
+        <abundance value="0.4279" error="0.0005"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Te" atomic-number="52">
+    <natural-abundance>
+      <mass value="127.60" error="0.03"/>
+      <isotope mass-number="120">
+        <mass value="119.904026" error="0.000011"/>
+        <abundance value="0.0009" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="122">
+        <mass value="121.9030558" error="0.0000029"/>
+        <abundance value="0.0255" error="0.0012"/>
+      </isotope>
+      <isotope mass-number="123">
+        <mass value="122.9042711" error="0.0000020"/>
+        <abundance value="0.0089" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="124">
+        <mass value="123.9028188" error="0.0000016"/>
+        <abundance value="0.0474" error="0.0014"/>
+      </isotope>
+      <isotope mass-number="125">
+        <mass value="124.9044241" error="0.0000020"/>
+        <abundance value="0.0707" error="0.0015"/>
+      </isotope>
+      <isotope mass-number="126">
+        <mass value="125.9033049" error="0.0000020"/>
+        <abundance value="0.1884" error="0.0025"/>
+      </isotope>
+      <isotope mass-number="128">
+        <mass value="127.9044615" error="0.0000019"/>
+        <abundance value="0.3174" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="130">
+        <mass value="129.9062229" error="0.0000021"/>
+        <abundance value="0.3408" error="0.0062"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="I" atomic-number="53">
+    <natural-abundance>
+      <mass value="126.90447" error="0.00003"/>
+      <isotope mass-number="127">
+        <mass value="126.904468" error="0.000004"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Xe" atomic-number="54">
+    <natural-abundance>
+      <mass value="131.293" error="0.006"/>
+      <isotope mass-number="124">
+        <mass value="123.9058954" error="0.0000021"/>
+        <abundance value="0.000952" error="0.000003"/>
+      </isotope>
+      <isotope mass-number="126">
+        <mass value="125.904268" error="0.000007"/>
+        <abundance value="0.000890" error="0.000002"/>
+      </isotope>
+      <isotope mass-number="128">
+        <mass value="127.9035305" error="0.0000015"/>
+        <abundance value="0.019102" error="0.000008"/>
+      </isotope>
+      <isotope mass-number="129">
+        <mass value="128.9047799" error="0.0000009"/>
+        <abundance value="0.264006" error="0.000082"/>
+      </isotope>
+      <isotope mass-number="130">
+        <mass value="129.9035089" error="0.0000011"/>
+        <abundance value="0.040710" error="0.000013"/>
+      </isotope>
+      <isotope mass-number="131">
+        <mass value="130.9050828" error="0.0000018"/>
+        <abundance value="0.212324" error="0.000030"/>
+      </isotope>
+      <isotope mass-number="132">
+        <mass value="131.9041546" error="0.0000015"/>
+        <abundance value="0.269086" error="0.000033"/>
+      </isotope>
+      <isotope mass-number="134">
+        <mass value="133.9053945" error="0.0000009"/>
+        <abundance value="0.104357" error="0.000021"/>
+      </isotope>
+      <isotope mass-number="136">
+        <mass value="135.907220" error="0.000008"/>
+        <abundance value="0.088573" error="0.000044"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Cs" atomic-number="55">
+    <natural-abundance>
+      <mass value="132.90545" error="0.00002"/>
+      <isotope mass-number="133">
+        <mass value="132.905447" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ba" atomic-number="56">
+    <natural-abundance>
+      <mass value="137.327" error="0.007"/>
+      <isotope mass-number="130">
+        <mass value="129.906311" error="0.000007"/>
+        <abundance value="0.00106" error="0.00001"/>
+      </isotope>
+      <isotope mass-number="132">
+        <mass value="131.905056" error="0.000003"/>
+        <abundance value="0.00101" error="0.00001"/>
+      </isotope>
+      <isotope mass-number="134">
+        <mass value="133.904504" error="0.000003"/>
+        <abundance value="0.02417" error="0.00018"/>
+      </isotope>
+      <isotope mass-number="135">
+        <mass value="134.905684" error="0.000003"/>
+        <abundance value="0.000003" error="0.00012"/>
+      </isotope>
+      <isotope mass-number="136">
+        <mass value="135.904571" error="0.000003"/>
+        <abundance value="0.07854" error="0.00024"/>
+      </isotope>
+      <isotope mass-number="137">
+        <mass value="136.905822" error="0.000003"/>
+        <abundance value="0.11232" error="0.00024"/>
+      </isotope>
+      <isotope mass-number="138">
+        <mass value="137.905242" error="0.000003"/>
+        <abundance value="0.71698" error="0.00042"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="La" atomic-number="57">
+    <natural-abundance>
+      <mass value="138.9055" error="0.0002"/>
+      <isotope mass-number="138">
+        <mass value="137.907108" error="0.000004"/>
+        <abundance value="0.00090" error="0.00001"/>
+      </isotope>
+      <isotope mass-number="139">
+        <mass value="138.906349" error="0.000004"/>
+        <abundance value="0.99910" error="0.00001"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ce" atomic-number="58">
+    <natural-abundance>
+      <mass value="140.116" error="0.001"/>
+      <isotope mass-number="136">
+        <mass value="135.907140" error="0.000050"/>
+        <abundance value="0.00185" error="0.00002"/>
+      </isotope>
+      <isotope mass-number="138">
+        <mass value="137.905986" error="0.000011"/>
+        <abundance value="0.00251" error="0.00002"/>
+      </isotope>
+      <isotope mass-number="140">
+        <mass value="139.905" error="0.000003"/>
+        <abundance value="0.88450" error="0.00051"/>
+      </isotope>
+      <isotope mass-number="142">
+        <mass value="141.909241" error="0.000004"/>
+        <abundance value="0.11114" error="0.00051"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Pr" atomic-number="59">
+    <natural-abundance>
+      <mass value="140.90765" error="0.00002"/>
+      <isotope mass-number="141">
+        <mass value="140.907648" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Nd" atomic-number="60">
+    <natural-abundance>
+      <mass value="144.24" error="0.03"/>
+      <isotope mass-number="142">
+        <mass value="141.907719" error="0.000003"/>
+        <abundance value="0.272" error="0.005"/>
+      </isotope>
+      <isotope mass-number="143">
+        <mass value="142.909810" error="0.000003"/>
+        <abundance value="0.122" error="0.002"/>
+      </isotope>
+      <isotope mass-number="144">
+        <mass value="143.910083" error="0.000003"/>
+        <abundance value="0.238" error="0.003"/>
+      </isotope>
+      <isotope mass-number="145">
+        <mass value="144.912569" error="0.000003"/>
+        <abundance value="0.083" error="0.001"/>
+      </isotope>
+      <isotope mass-number="146">
+        <mass value="145.913113" error="0.000003"/>
+        <abundance value="0.172" error="0.003"/>
+      </isotope>
+      <isotope mass-number="148">
+        <mass value="147.916889" error="0.000004"/>
+        <abundance value="0.057" error="0.001"/>
+      </isotope>
+      <isotope mass-number="150">
+        <mass value="149.920887" error="0.000004"/>
+        <abundance value="0.056" error="0.002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Sm" atomic-number="62">
+    <natural-abundance>
+      <mass value="150.36" error="0.03"/>
+      <isotope mass-number="144">
+        <mass value="143.911996" error="0.000004"/>
+        <abundance value="0.0307" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="147">
+        <mass value="146.914894" error="0.000003"/>
+        <abundance value="0.1499" error="0.0018"/>
+      </isotope>
+      <isotope mass-number="148">
+        <mass value="147.914818" error="0.1124"/>
+        <abundance value="0.1124" error="0.0010"/>
+      </isotope>
+      <isotope mass-number="149">
+        <mass value="148.917180" error="0.000003"/>
+        <abundance value="0.1382" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="150">
+        <mass value="149.917272" error="0.000003"/>
+        <abundance value="0.0738" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="152">
+        <mass value="151.919729" error="0.000003"/>
+        <abundance value="0.2675" error="0.0016"/>
+      </isotope>
+      <isotope mass-number="154">
+        <mass value="153.922206" error="0.000003"/>
+        <abundance value="0.2275" error="0.0029"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Eu" atomic-number="63">
+    <natural-abundance>
+      <mass value="151.964" error="0.001"/>
+      <isotope mass-number="151">
+        <mass value="150.919846" error="0.000003"/>
+        <abundance value="0.4781" error="0.0006"/>
+      </isotope>
+      <isotope mass-number="153">
+        <mass value="152.921227" error="0.000003"/>
+        <abundance value="0.5219" error="0.0006"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Gd" atomic-number="64">
+    <natural-abundance>
+      <mass value="157.25" error="0.03"/>
+      <isotope mass-number="152">
+        <mass value="151.919789" error="0.000003"/>
+        <abundance value="0.0020" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="154">
+        <mass value="153.920862" error="0.000003"/>
+        <abundance value="0.0218" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="155">
+        <mass value="154.922619" error="0.000003"/>
+        <abundance value="0.1480" error="0.0012"/>
+      </isotope>
+      <isotope mass-number="156">
+        <mass value="155.922120" error="0.000003"/>
+        <abundance value="0.2047" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="157">
+        <mass value="156.923957" error="0.000003"/>
+        <abundance value="0.1565" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="158">
+        <mass value="157.924101" error="0.000003"/>
+        <abundance value="0.2484" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="160">
+        <mass value="159.927051" error="0.000003"/>
+        <abundance value="0.2186" error="0.0019"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Tb" atomic-number="65">
+    <natural-abundance>
+      <mass value="158.92534" error="0.00002"/>
+      <isotope mass-number="159">
+        <mass value="158.925343" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Dy" atomic-number="66">
+    <natural-abundance>
+      <mass value="162.500" error="0.001"/>
+      <isotope mass-number="156">
+        <mass value="155.924278" error="0.000007"/>
+        <abundance value="0.00056" error="0.00003"/>
+      </isotope>
+      <isotope mass-number="158">
+        <mass value="157.924405" error="0.000004"/>
+        <abundance value="0.00095" error="0.00003"/>
+      </isotope>
+      <isotope mass-number="160">
+        <mass value="159.925194" error="0.000003"/>
+        <abundance value="0.02329" error="0.00018"/>
+      </isotope>
+      <isotope mass-number="161">
+        <mass value="160.926930" error="0.000003"/>
+        <abundance value="0.18889" error="0.00042"/>
+      </isotope>
+      <isotope mass-number="162">
+        <mass value="161.926795" error="0.000003"/>
+        <abundance value="0.25475" error="0.00036"/>
+      </isotope>
+      <isotope mass-number="163">
+        <mass value="162.928728" error="0.000003"/>
+        <abundance value="0.24896" error="0.00042"/>
+      </isotope>
+      <isotope mass-number="164">
+        <mass value="163.929171" error="0.000003"/>
+        <abundance value="0.28260" error="0.00054"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ho" atomic-number="67">
+    <natural-abundance>
+      <mass value="164.93032" error="0.00002"/>
+      <isotope mass-number="165">
+        <mass value="164.930319" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Er" atomic-number="68">
+    <natural-abundance>
+      <mass value="167.259" error="0.003"/>
+      <isotope mass-number="162">
+        <mass value="161.928775" error="0.000004"/>
+        <abundance value="0.00139" error="0.00005"/>
+      </isotope>
+      <isotope mass-number="164">
+        <mass value="163.929197" error="0.000004"/>
+        <abundance value="0.01601" error="0.00003"/>
+      </isotope>
+      <isotope mass-number="166">
+        <mass value="165.930290" error="0.000003"/>
+        <abundance value="0.33503" error="0.00036"/>
+      </isotope>
+      <isotope mass-number="167">
+        <mass value="166.932046" error="0.000003"/>
+        <abundance value="0.22869" error="0.00009"/>
+      </isotope>
+      <isotope mass-number="168">
+        <mass value="167.932368" error="0.000003"/>
+        <abundance value="0.26978" error="0.00018"/>
+      </isotope>
+      <isotope mass-number="170">
+        <mass value="169.935461" error="0.000003"/>
+        <abundance value="0.14910" error="0.00036"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Tm" atomic-number="69">
+    <natural-abundance>
+      <mass value="168.93421" error="0.00002"/>
+      <isotope mass-number="169">
+        <mass value="168.934211" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Yb" atomic-number="70">
+    <natural-abundance>
+      <mass value="173.04" error="0.03"/>
+      <isotope mass-number="168">
+        <mass value="167.933895" error="0.000005"/>
+        <abundance value="0.0013" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="170">
+        <mass value="169.934759" error="0.000003"/>
+        <abundance value="0.0304" error="0.0015"/>
+      </isotope>
+      <isotope mass-number="171">
+        <mass value="170.936323" error="0.000003"/>
+        <abundance value="0.1428" error="0.0057"/>
+      </isotope>
+      <isotope mass-number="172">
+        <mass value="171.936378" error="0.000003"/>
+        <abundance value="0.2183" error="0.0067"/>
+      </isotope>
+      <isotope mass-number="173">
+        <mass value="172.938207" error="0.000003"/>
+        <abundance value="0.1613" error="0.0027"/>
+      </isotope>
+      <isotope mass-number="174">
+        <mass value="173.938858" error="0.000003"/>
+        <abundance value="0.3183" error="0.0092"/>
+      </isotope>
+      <isotope mass-number="176">
+        <mass value="175.942569" error="0.000003"/>
+        <abundance value="0.1276" error="0.0041"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Lu" atomic-number="71">
+    <natural-abundance>
+      <mass value="174.967" error="0.001"/>
+      <isotope mass-number="175">
+        <mass value="174.9407682" error="0.0000028"/>
+        <abundance value="0.9741" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="176">
+        <mass value="175.9426827" error="0.0000028"/>
+        <abundance value="0.0259" error="0.0002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Hf" atomic-number="72">
+    <natural-abundance>
+      <mass value="178.49" error="0.02"/>
+      <isotope mass-number="174">
+        <mass value="173.940042" error="0.000004"/>
+        <abundance value="0.0016" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="176">
+        <mass value="175.941403" error="0.000003"/>
+        <abundance value="0.0526" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="177">
+        <mass value="176.9432204" error="0.0000027"/>
+        <abundance value="0.1860" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="178">
+        <mass value="177.9436981" error="0.0000027"/>
+        <abundance value="0.2728" error="0.0007"/>
+      </isotope>
+      <isotope mass-number="179">
+        <mass value="178.9488154" error="0.0000027"/>
+        <abundance value="0.1362" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="180">
+        <mass value="179.9465488" error="0.0000027"/>
+        <abundance value="0.3508" error="0.0016"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ta" atomic-number="73">
+    <natural-abundance>
+      <mass value="180.9479" error="0.0001"/>
+      <isotope mass-number="180">
+        <mass value="179.947466" error="0.000003"/>
+        <abundance value="0.00012" error="0.00002"/>
+      </isotope>
+      <isotope mass-number="181">
+        <mass value="180.947996" error="0.000003"/>
+        <abundance value="0.99988" error="0.00002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="W" atomic-number="74">
+    <natural-abundance>
+      <mass value="183.84" error="0.01"/>
+      <isotope mass-number="180">
+        <mass value="179.946706" error="0.000005"/>
+        <abundance value="0.0012" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="182">
+        <mass value="181.948205" error="0.000003"/>
+        <abundance value="0.265" error="0.0016"/>
+      </isotope>
+      <isotope mass-number="183">
+        <mass value="182.9502242" error="0.0000030"/>
+        <abundance value="0.1431" error="0.0004"/>
+      </isotope>
+      <isotope mass-number="184">
+        <mass value="183.9509323" error="0.0000030"/>
+        <abundance value="0.3064" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="186">
+        <mass value="185.954362" error="0.000003"/>
+        <abundance value="0.2843" error="0.0019"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Re" atomic-number="75">
+    <natural-abundance>
+      <mass value="186.207" error="0.001"/>
+      <isotope mass-number="185">
+        <mass value="184.952955" error="0.000003"/>
+        <abundance value="0.3740" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="187">
+        <mass value="186.9557505" error="0.0000030"/>
+        <abundance value="0.6260" error="0.0002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Os" atomic-number="76">
+    <natural-abundance>
+      <mass value="190.23" error="0.03"/>
+      <isotope mass-number="184">
+        <mass value="183.952491" error="0.000003"/>
+        <abundance value="0.0002" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="186">
+        <mass value="185.953838" error="0.000003"/>
+        <abundance value="0.0159" error="0.0003"/>
+      </isotope>
+      <isotope mass-number="187">
+        <mass value="186.9557476" error="0.0000030"/>
+        <abundance value="0.0196" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="188">
+        <mass value="187.9558357" error="0.0000030"/>
+        <abundance value="0.1324" error="0.0008"/>
+      </isotope>
+      <isotope mass-number="189">
+        <mass value="188.958145" error="0.000003"/>
+        <abundance value="0.1615" error="0.0005"/>
+      </isotope>
+      <isotope mass-number="190">
+        <mass value="189.958445" error="0.000003"/>
+        <abundance value="0.2626" error="0.0002"/>
+      </isotope>
+      <isotope mass-number="192">
+        <mass value="191.961479" error="0.000004"/>
+        <abundance value="0.4078" error="0.0019"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Ir" atomic-number="77">
+    <natural-abundance>
+      <mass value="192.217" error="0.003"/>
+      <isotope mass-number="191">
+        <mass value="190.960591" error="0.000003"/>
+        <abundance value="0.373" error="0.002"/>
+      </isotope>
+      <isotope mass-number="193">
+        <mass value="192.962923" error="0.000003"/>
+        <abundance value="0.627" error="0.002"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Pt" atomic-number="78">
+    <natural-abundance>
+      <mass value="195.078" error="0.002"/>
+      <isotope mass-number="190">
+        <mass value="189.959930" error="0.000007"/>
+        <abundance value="0.00014" error="0.00001"/>
+      </isotope>
+      <isotope mass-number="192">
+        <mass value="191.961035" error="0.000004"/>
+        <abundance value="0.00782" error="0.00007"/>
+      </isotope>
+      <isotope mass-number="194">
+        <mass value="193.962663" error="0.000003"/>
+        <abundance value="0.32967" error="0.00099"/>
+      </isotope>
+      <isotope mass-number="195">
+        <mass value="194.964774" error="0.000003"/>
+        <abundance value="0.33832" error="0.00010"/>
+      </isotope>
+      <isotope mass-number="196">
+        <mass value="195.964934" error="0.000003"/>
+        <abundance value="0.25242" error="0.00041"/>
+      </isotope>
+      <isotope mass-number="198">
+        <mass value="197.967875" error="0.000005"/>
+        <abundance value="0.07163" error="0.00055"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Au" atomic-number="79">
+    <natural-abundance>
+      <mass value="196.96655" error="0.00002"/>
+      <isotope mass-number="197">
+        <mass value="196.966551" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Hg" atomic-number="80">
+    <natural-abundance>
+      <mass value="200.59" error="0.02"/>
+      <isotope mass-number="196">
+        <mass value="195.965814" error="0.000004"/>
+        <abundance value="0.0015" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="198">
+        <mass value="197.966752" error="0.000003"/>
+        <abundance value="0.0997" error="0.0020"/>
+      </isotope>
+      <isotope mass-number="199">
+        <mass value="198.968262" error="0.000003"/>
+        <abundance value="0.1687" error="0.0022"/>
+      </isotope>
+      <isotope mass-number="200">
+        <mass value="199.968309" error="0.000003"/>
+        <abundance value="0.2310" error="0.0019"/>
+      </isotope>
+      <isotope mass-number="201">
+        <mass value="200.970285" error="0.000003"/>
+        <abundance value="0.1318" error="0.0009"/>
+      </isotope>
+      <isotope mass-number="202">
+        <mass value="201.970625" error="0.000003"/>
+        <abundance value="0.2986" error="0.0026"/>
+      </isotope>
+      <isotope mass-number="204">
+        <mass value="203.973475" error="0.000003"/>
+        <abundance value="0.0687" error="0.0015"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Tl" atomic-number="81">
+    <natural-abundance>
+      <mass value="204.3833" error="0.0002"/>
+      <isotope mass-number="203">
+        <mass value="202.972329" error="0.000003"/>
+        <abundance value="0.2952" error="0.0001"/>
+      </isotope>
+      <isotope mass-number="205">
+        <mass value="204.974412" error="0.000003"/>
+        <abundance value="0.7048" error="0.0001"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Pb" atomic-number="82">
+    <natural-abundance>
+      <mass value="207.2" error="0.1"/>
+      <isotope mass-number="204">
+        <mass value="203.973028" error="0.000003"/>
+        <abundance value="0.014" error="0.001"/>
+      </isotope>
+      <isotope mass-number="206">
+        <mass value="205.974449" error="0.000003"/>
+        <abundance value="0.241" error="0.001"/>
+      </isotope>
+      <isotope mass-number="207">
+        <mass value="206.975880" error="0.000003"/>
+        <abundance value="0.221" error="0.001"/>
+      </isotope>
+      <isotope mass-number="208">
+        <mass value="207.976636" error="0.000003"/>
+        <abundance value="0.524" error="0.001"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Bi" atomic-number="83">
+    <natural-abundance>
+      <mass value="208.98038" error="0.00002"/>
+      <isotope mass-number="209">
+        <mass value="208.980384" error="0.000003"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Th" atomic-number="90">
+    <natural-abundance>
+      <mass value="232.0381" error="0.0001"/>
+      <isotope mass-number="232">
+        <mass value="232.0380495" error="0.0000022"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="Pa" atomic-number="91">
+    <natural-abundance>
+      <mass value="231.03588" error="0.00002"/>
+      <isotope mass-number="231">
+        <mass value="231.03588" error="0.00002"/>
+        <abundance value="1" error="0"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+  <entry symbol="U" atomic-number="92">
+    <natural-abundance>
+      <mass value="238.02891" error="0.00003"/>
+      <isotope mass-number="234">
+        <mass value="234.0409447" error="0.0000022"/>
+        <abundance value="0.000054" error="0.000005"/>
+      </isotope>
+      <isotope mass-number="235">
+        <mass value="235.0439222" error="0.0000021"/>
+        <abundance value="0.007204" error="0.000006"/>
+      </isotope>
+      <isotope mass-number="238">
+        <mass value="238.0507835" error="0.0000022"/>
+        <abundance value="0.992742" error="0.000010"/>
+      </isotope>
+    </natural-abundance>
+  </entry>
+</atomic-mass-table>
diff --git a/data/startup-tips.txt b/data/startup-tips.txt
new file mode 100644
index 0000000..1ae43f9
--- /dev/null
+++ b/data/startup-tips.txt
@@ -0,0 +1,23 @@
+#This is the startup tips file that is passed to wxTipProvider, to generate the startup tips dialog
+# each tip must be of the form _("some tip"), the leading _(" must be the same for each tip.
+# wx docs say : blank lines, and lines starting with # are skipped
+
+_("You can reset the main view by tapping the space bar. Hold down modifier keys like shift,ctrl to change the axis. Double tap to switch which axis to look down")
+_("You can delete filters from the tree by selecting them, then tapping delete?")
+_("Multiple languages are supported? You can translate the program into your own language at https://www.transifex.com/projects/p/3depict/")
+_("Package files can be easily shared to allow others to view your analysis, using the File->Export->Package menu item")
+_("You can export plots to SVG \"Vector\" format, for easier editing - edit your plots in inkscape!")
+_("You can access the manual from the Help menu")
+_("You can change filter defaults using the Edit->Preferences menu item")
+_("You can overlay multiple plots at once, by selecting more than on plot at a time (e.g. using Ctrl)")
+_("Calculations are much faster (more than linear speedup) when working with smaller datasets - try sampling, or clipping out a small region to work faster, then remove the sampling when you are ready")
+_("You can abort most calculations by pressing Escape")
+_("That anyone can contribute to improving this program, even without knowing about computer programming?")
+_("You can load more than one file at a time, then either operate on the separately, or together")
+_("You can have more than one range file for different parts of your dataset")
+_("Cameras can be saved and retrieved whenever you like, using the camera tab")
+_("Subsections of the filter tree can be saved to the \"Stashed filters\" drop-down")
+_("The console tab along the bottom often shows useful messages from filters. When new messages appear, a small symbol is shown on the tab")
+_("The raw data used for any plot can be accessed from the \"Raw\" tab on the bottom panel")
+_("You can ask questions about the program, or using it on your data on our forums (http://sourceforge.net/apps/phpbb/threedepict/)")
+_("By creating a camera, you can switch between orthographic and perspective views")
diff --git a/depcomp b/depcomp
old mode 100644
new mode 100755
index ca5ea4e..4ebd5b3
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2006-10-15.18
+scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
-# Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 
 # 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
@@ -17,9 +16,7 @@ scriptversion=2006-10-15.18
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -30,9 +27,9 @@ scriptversion=2006-10-15.18
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -42,11 +39,11 @@ as side-effects.
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake at gnu.org>.
@@ -59,6 +56,66 @@ EOF
     ;;
 esac
 
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -71,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
 rm -f "$tmpdepfile"
 
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
@@ -82,9 +142,32 @@ if test "$depmode" = hp; then
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
@@ -107,8 +190,7 @@ gcc3)
   done
   "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -116,13 +198,17 @@ gcc3)
   ;;
 
 gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
@@ -130,31 +216,31 @@ gcc)
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -172,8 +258,7 @@ sgi)
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -181,99 +266,156 @@ sgi)
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
-
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> $depfile
-    echo >> $depfile
-
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
     "$@" -Wc,-M
   else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
     "$@" -M
   fi
   stat=$?
-
-  if test -f "$tmpdepfile"; then :
-  else
-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
-    tmpdepfile="$stripped.u"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
   fi
 
-  if test $stat -eq 0; then :
-  else
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
-
-  if test -f "$tmpdepfile"; then
-    outname="$stripped.o"
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
 
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -285,8 +427,8 @@ icc)
   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   # Some versions of the HPUX 10.20 sed can't process this invocation
   # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -297,9 +439,8 @@ hp2)
   # 'foo.d', which lands next to the object file, wherever that
   # happens to be.
   # Much of this is similar to the tru64 case; see comments there.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from  "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
@@ -310,8 +451,7 @@ hp2)
     "$@" +Maked
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
@@ -321,72 +461,107 @@ hp2)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
-    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
   else
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile" "$tmpdepfile2"
   ;;
 
 tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
 
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
@@ -399,13 +574,13 @@ dashmstdout)
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -425,18 +600,18 @@ dashmstdout)
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -450,41 +625,51 @@ makedepend)
   "$@" || exit $?
   # Remove any Libtool call
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
   # X makedepend
   shift
-  cleared=no
-  for arg in "$@"; do
+  cleared=no eat=no
+  for arg
+  do
     case $cleared in
     no)
       set ""; shift
       cleared=yes ;;
     esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
     case "$arg" in
     -D*|-I*)
       set fnord "$@" "$arg"; shift ;;
     # Strip any option that makedepend may not understand.  Remove
     # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
     -*|$object)
       ;;
     *)
       set fnord "$@" "$arg"; shift ;;
     esac
   done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
@@ -495,13 +680,13 @@ cpp)
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -520,10 +705,10 @@ cpp)
     esac
   done
 
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
+  "$@" -E \
+    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    | sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
@@ -533,35 +718,56 @@ cpp)
 
 msvisualcpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the preprocessed file to stdout.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
   IFS=" "
   for arg
   do
     case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 none)
   exec "$@"
   ;;
@@ -580,5 +786,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/docs/manual-latex/3depictusermanual.kilepr b/docs/manual-latex/3depictusermanual.kilepr
index 4616df8..7cdbe90 100644
--- a/docs/manual-latex/3depictusermanual.kilepr
+++ b/docs/manual-latex/3depictusermanual.kilepr
@@ -17,7 +17,7 @@ MakeIndex=
 QuickBuild=
 
 [document-settings,item:manual.tex]
-Bookmarks=957,403
+Bookmarks=1020,423
 Encoding=UTF-8
 FoldedColumns=
 FoldedLines=
@@ -68,16 +68,16 @@ order=-1
 
 [item:manual.tex]
 archive=true
-column=0
+column=270
 encoding=UTF-8
 highlight=LaTeX
-line=356
+line=1891
 mode=LaTeX
 open=true
 order=0
 
 [view-settings,view=0,item:manual.tex]
-CursorColumn=0
-CursorLine=356
+CursorColumn=270
+CursorLine=1891
 JumpList=
-ViMarks=a,403,0,b,957,0
+ViMarks=a,423,0,b,1020,0
diff --git a/docs/manual-latex/figures/rangeEditOverlay.png b/docs/manual-latex/figures/rangeEditOverlay.png
new file mode 100644
index 0000000..ecc69c2
Binary files /dev/null and b/docs/manual-latex/figures/rangeEditOverlay.png differ
diff --git a/docs/manual-latex/figures/rangeedit-clash.png b/docs/manual-latex/figures/rangeedit-clash.png
new file mode 100644
index 0000000..65b6cf4
Binary files /dev/null and b/docs/manual-latex/figures/rangeedit-clash.png differ
diff --git a/docs/manual-latex/figures/tree-layout.png b/docs/manual-latex/figures/tree-layout.png
new file mode 100644
index 0000000..a7d96b0
Binary files /dev/null and b/docs/manual-latex/figures/tree-layout.png differ
diff --git a/docs/manual-latex/figures/tree-layout.svg b/docs/manual-latex/figures/tree-layout.svg
new file mode 100644
index 0000000..33b9ac0
--- /dev/null
+++ b/docs/manual-latex/figures/tree-layout.svg
@@ -0,0 +1,266 @@
+<?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://creativecommons.org/ns#"
+   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="1000"
+   height="720"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="Neues Dokument 1">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path3862"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3862-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-40"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3862-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="489.01843"
+     inkscape:cy="73.563793"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1353"
+     inkscape:window-height="940"
+     inkscape:window-x="200"
+     inkscape:window-y="76"
+     inkscape:window-maximized="0">
+    <sodipodi:guide
+       orientation="1,0"
+       position="310.33482,419.77743"
+       id="guide2989" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-61.09375,-3.5681568)">
+    <g
+       id="g4369"
+       transform="translate(48.571429,-8.5714286)">
+      <path
+         sodipodi:nodetypes="ccc"
+         inkscape:connector-curvature="0"
+         id="path2987"
+         d="m 197.14286,203.21933 0,196.28571 177.14286,0"
+         style="fill:none;stroke:#000000;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         id="g3000">
+        <g
+           id="g2995">
+          <rect
+             ry="22.857143"
+             y="148.96484"
+             x="62.685196"
+             height="53.397339"
+             width="298.10956"
+             id="rect2985"
+             style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <text
+             sodipodi:linespacing="125%"
+             id="text2991"
+             y="187.36688"
+             x="88.595695"
+             style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="187.36688"
+               x="88.595695"
+               id="tspan2993"
+               sodipodi:role="line">Operation 1</tspan></text>
+        </g>
+      </g>
+      <g
+         id="g3000-9"
+         transform="translate(310.50889,224.14012)">
+        <g
+           id="g2995-5">
+          <rect
+             ry="22.857143"
+             y="148.96484"
+             x="62.685196"
+             height="53.397339"
+             width="298.10956"
+             id="rect2985-4"
+             style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <text
+             sodipodi:linespacing="125%"
+             id="text2991-1"
+             y="187.36688"
+             x="88.595695"
+             style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="187.36688"
+               x="88.595695"
+               id="tspan2993-7"
+               sodipodi:role="line">Operation 2</tspan></text>
+        </g>
+      </g>
+      <g
+         id="g3000-9-9"
+         transform="translate(307.47843,351.41935)">
+        <g
+           id="g2995-5-9">
+          <rect
+             ry="22.857143"
+             y="148.96484"
+             x="62.685196"
+             height="53.397339"
+             width="298.10956"
+             id="rect2985-4-4"
+             style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.20000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <text
+             sodipodi:linespacing="125%"
+             id="text2991-1-6"
+             y="187.36688"
+             x="88.595695"
+             style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="187.36688"
+               x="88.595695"
+               id="tspan2993-7-0"
+               sodipodi:role="line">Operation 3</tspan></text>
+        </g>
+      </g>
+      <path
+         sodipodi:nodetypes="ccc"
+         inkscape:connector-curvature="0"
+         id="path3066"
+         d="m 197.1023,397.78333 0,130.30968 174.32627,0"
+         style="fill:none;stroke:#000000;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3836"
+         y="53.790752"
+         x="407.14288"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="53.790752"
+           x="407.14288"
+           id="tspan3838"
+           sodipodi:role="line">Parent of </tspan><tspan
+           id="tspan3842"
+           y="103.79076"
+           x="407.14288"
+           sodipodi:role="line"> 2 and 3</tspan></text>
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path3846"
+         d="m 395.71428,43.790753 c -95.53,1.235205 -103.11876,6.901441 -121.7568,25.123589 -20.55458,20.095911 -35.52598,39.099408 -48.24319,64.876408"
+         style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3836-7"
+         y="261.16818"
+         x="766.99615"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           id="tspan3842-7"
+           y="261.16818"
+           x="766.99615"
+           sodipodi:role="line">Child of 1,</tspan><tspan
+           id="tspan4334"
+           y="311.16818"
+           x="766.99615"
+           sodipodi:role="line">Sibling of 3</tspan></text>
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path3846-2"
+         d="m 755.56755,251.16821 c -95.53,1.2352 -103.11876,6.90144 -121.7568,25.12359 -20.55458,20.09591 -35.52598,39.0994 -48.24319,64.8764"
+         style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3836-7-6"
+         y="665.24786"
+         x="647.95325"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           id="tspan3842-7-6"
+           y="665.24786"
+           x="647.95325"
+           sodipodi:role="line">Child of 1,</tspan><tspan
+           id="tspan4334-6"
+           y="715.24786"
+           x="647.95325"
+           sodipodi:role="line">Sibling of 2</tspan></text>
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path3846-2-8"
+         d="m 616.3216,674.53721 c -95.53,-1.2352 -103.11876,-6.90144 -121.7568,-25.12359 -20.55458,-20.09591 -35.52598,-39.0994 -48.24319,-64.87639"
+         style="fill:none;stroke:#000000;stroke-width:2.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)" />
+    </g>
+  </g>
+</svg>
diff --git a/docs/manual-latex/manual.aux b/docs/manual-latex/manual.aux
deleted file mode 100644
index edcbcb1..0000000
--- a/docs/manual-latex/manual.aux
+++ /dev/null
@@ -1,191 +0,0 @@
-\relax 
-\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
-\HyperFirstAtBeginDocument{\ifx\hyper at anchor\@undefined
-\global\let\oldcontentsline\contentsline
-\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
-\global\let\oldnewlabel\newlabel
-\gdef\newlabel#1#2{\newlabelxx{#1}#2}
-\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
-\AtEndDocument{\ifx\hyper at anchor\@undefined
-\let\contentsline\oldcontentsline
-\let\newlabel\oldnewlabel
-\fi}
-\fi}
-\global\let\hyper at last\relax 
-\gdef\HyperFirstAtBeginDocument#1{#1}
-\providecommand\HyField at AuxAddToFields[1]{}
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foreword}{1}{section.1}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Introduction}{1}{subsection.1.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.1}Background}{1}{subsubsection.1.1.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.1.2}What is Open Source?}{1}{subsubsection.1.1.2}}
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Closed-source programs only provide the final application, are neither human readable nor modifiable, and will only work on a specific platform. By contrast open source programs distribute the source-code as well as the application. The source code is the core logic which can be made to work on many platforms due to the invariance of the program logic.}}{1}{figure.1}}
-\newlabel{fig:compilation}{{1}{1}{Closed-source programs only provide the final application, are neither human readable nor modifiable, and will only work on a specific platform. By contrast open source programs distribute the source-code as well as the application. The source code is the core logic which can be made to work on many platforms due to the invariance of the program logic}{figure.1}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Requirements}{2}{subsection.1.2}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Platform specific notes}{2}{subsection.1.3}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.4}Getting help}{3}{subsection.1.4}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.5}Who wrote this program?}{3}{subsection.1.5}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.6}Alternate documentation}{3}{subsection.1.6}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {1.7}Helping out}{3}{subsection.1.7}}
-\@writefile{toc}{\contentsline {section}{\numberline {2}Basics}{3}{section.2}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Getting started}{3}{subsection.2.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.1}Licence}{3}{subsubsection.2.1.1}}
-\newlabel{sec:licence}{{2.1.1}{3}{Licence\relax }{subsubsection.2.1.1}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.1.2}Installing the program}{4}{subsubsection.2.1.2}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Understanding the interface}{4}{subsection.2.2}}
-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Interface layout. The 3D view, plot panel and filter tree are labelled.}}{4}{figure.2}}
-\newlabel{fig:interfaceLayout}{{2}{4}{Interface layout. The 3D view, plot panel and filter tree are labelled}{figure.2}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.1}The 3D View}{5}{subsubsection.2.2.1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Basic camera layout. Each camera has a position, an up direction and a target. The 3D view is as seen by the camera. Cameras may be saved and recalled to return to specific views. Try to realise it is not the object that moves, but rather yourself.}}{5}{figure.3}}
-\newlabel{fig:camera-basics}{{3}{5}{Basic camera layout. Each camera has a position, an up direction and a target. The 3D view is as seen by the camera. Cameras may be saved and recalled to return to specific views. Try to realise it is not the object that moves, but rather yourself}{figure.3}{}}
-\@writefile{toc}{\contentsline {paragraph}{Basic movement}{5}{figure.3}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.2}Plot area}{6}{subsubsection.2.2.2}}
-\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Raw data pane, with associated spectrum displayed. Data can be selected, and saved for external manipulation as desired.}}{6}{figure.4}}
-\newlabel{fig:raw-basics}{{4}{6}{Raw data pane, with associated spectrum displayed. Data can be selected, and saved for external manipulation as desired}{figure.4}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.3}Console}{6}{subsubsection.2.2.3}}
-\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Console tab, with sample console messages. The inset shows how the tab will appear if messages are pending whilst the console itself is hidden.}}{7}{figure.5}}
-\newlabel{fig:console-basics}{{5}{7}{Console tab, with sample console messages. The inset shows how the tab will appear if messages are pending whilst the console itself is hidden}{figure.5}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.2.4}Tools panel}{7}{subsubsection.2.2.4}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Usage fundamentals}{8}{subsection.2.3}}
-\@writefile{toc}{\contentsline {section}{\numberline {3}Quick start}{9}{section.3}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Loading data}{9}{subsection.3.1}}
-\newlabel{sec:quickStartLoadData}{{3.1}{9}{Loading data\relax }{subsection.3.1}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Loading an analysis}{9}{subsection.3.2}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Ranging}{9}{subsection.3.3}}
-\newlabel{sec:quickStartRangedData}{{3.3}{9}{Ranging\relax }{subsection.3.3}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Opening a range file can be done from either the filter drop down, or by dropping a rangefile onto the program. You must first have data loaded (as shown by the red points).}}{10}{figure.6}}
-\newlabel{fig:rangeDropdown}{{6}{10}{Opening a range file can be done from either the filter drop down, or by dropping a rangefile onto the program. You must first have data loaded (as shown by the red points)}{figure.6}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Spectrum}{10}{subsection.3.4}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Composition profiles}{10}{subsection.3.5}}
-\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Ranged spectrum shown only the data that is within the selected ranging windows. The ``Drop unranged'' option can be used to show all the data, and thus the complete spectrum.}}{11}{figure.7}}
-\newlabel{fig:rangedSpectrum}{{7}{11}{Ranged spectrum shown only the data that is within the selected ranging windows. The ``Drop unranged'' option can be used to show all the data, and thus the complete spectrum}{figure.7}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Counting Points and measuring volume}{11}{subsection.3.6}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}Concentration surface and slices}{11}{subsection.3.7}}
-\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces This layout can be used to simultaneously display both the point cloud and the ranged spectrum.}}{12}{figure.8}}
-\newlabel{fig:rangedSpectrumWithCloud}{{8}{12}{This layout can be used to simultaneously display both the point cloud and the ranged spectrum}{figure.8}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces This layout can be used to show both point data and a concentration profile simultaneously.}}{12}{figure.9}}
-\newlabel{fig:quickStartConcLayout}{{9}{12}{This layout can be used to show both point data and a concentration profile simultaneously}{figure.9}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Ion count and volume data can be displayed from the ion information filter. The output is displayed in the console window.}}{13}{figure.10}}
-\newlabel{fig:quickStartIonInfoLayout}{{10}{13}{Ion count and volume data can be displayed from the ion information filter. The output is displayed in the console window}{figure.10}{}}
-\@writefile{toc}{\contentsline {section}{\numberline {4}Understanding the program}{14}{section.4}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Filters}{14}{subsection.4.1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Basic concept of a filter. Data goes in, data comes out. The filter may perform any operation on the data coming in or out as it chooses. The data streams coming in are restricted to certain types of data, as shown. }}{14}{figure.11}}
-\newlabel{fig:basic-filter}{{11}{14}{Basic concept of a filter. Data goes in, data comes out. The filter may perform any operation on the data coming in or out as it chooses. The data streams coming in are restricted to certain types of data, as shown}{figure.11}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Trees}{14}{subsection.4.2}}
-\newlabel{sec:treebehaviour}{{4.2}{14}{Trees\relax }{subsection.4.2}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Data propagation in a tree for a particular arrangement of filters. Data is propagated from a parent filter to its children.}}{15}{figure.12}}
-\newlabel{fig:datapropagate}{{12}{15}{Data propagation in a tree for a particular arrangement of filters. Data is propagated from a parent filter to its children}{figure.12}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Stashes}{15}{subsection.4.3}}
-\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces Creating a stash from the filter tree. New stashes will appear in the dropdown and can be selected to recall subtrees to insert into the filter tree.}}{16}{figure.13}}
-\newlabel{fig:stash-creation}{{13}{16}{Creating a stash from the filter tree. New stashes will appear in the dropdown and can be selected to recall subtrees to insert into the filter tree}{figure.13}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Plots}{16}{subsection.4.4}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Cameras}{16}{subsection.4.5}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.6}Effects}{17}{subsection.4.6}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {4.7}Program actions}{17}{subsection.4.7}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.1}Save}{17}{subsubsection.4.7.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.2}Undo}{17}{subsubsection.4.7.2}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.3}Raw Data}{17}{subsubsection.4.7.3}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.4}Export Menu}{17}{subsubsection.4.7.4}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.5}Autosave}{18}{subsubsection.4.7.5}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.6}Export Animation}{18}{subsubsection.4.7.6}}
-\newlabel{sec:animationExport}{{4.7.6}{18}{Export Animation\relax }{subsubsection.4.7.6}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Overview of animation dialog with ``filter view'' active; left hand area of the window shows standard tree view, right hand window shows properties that are to be animated.}}{19}{figure.14}}
-\newlabel{fig:animateFilterView}{{14}{19}{Overview of animation dialog with ``filter view'' active; left hand area of the window shows standard tree view, right hand window shows properties that are to be animated}{figure.14}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces Numerical input window for setting parameters for animation}}{19}{figure.15}}
-\newlabel{fig:animateParamDialog}{{15}{19}{Numerical input window for setting parameters for animation\relax }{figure.15}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces Conflicting filter properties shown, highlighted to show the conflicting values in the animation property grid.}}{20}{figure.16}}
-\newlabel{fig:animateParamConflict}{{16}{20}{Conflicting filter properties shown, highlighted to show the conflicting values in the animation property grid}{figure.16}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces Setting string properties using the string input dialog, via manual entry.}}{21}{figure.17}}
-\newlabel{fig:animatePropString}{{17}{21}{Setting string properties using the string input dialog, via manual entry}{figure.17}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces Overview of animation dialog with ``frame view'' active; right hand region of the window shows the values of the animation for each frame, on the left hand side are the outputs that the user wishes to obtain.}}{21}{figure.18}}
-\newlabel{fig:animateFrameView}{{18}{21}{Overview of animation dialog with ``frame view'' active; right hand region of the window shows the values of the animation for each frame, on the left hand side are the outputs that the user wishes to obtain}{figure.18}{}}
-\@writefile{toc}{\contentsline {section}{\numberline {5}Detailed Reference}{22}{section.5}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Data types}{22}{subsection.5.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.1}Ions}{22}{subsubsection.5.1.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.2}Plots}{22}{subsubsection.5.1.2}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.3}Range}{22}{subsubsection.5.1.3}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.4}Voxels}{22}{subsubsection.5.1.4}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.1.5}Drawables}{22}{subsubsection.5.1.5}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Filters}{22}{subsection.5.2}}
-\newlabel{sec:filter}{{5.2}{23}{Filters\relax }{subsection.5.2}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.1}Data load}{23}{subsubsection.5.2.1}}
-\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Propagation matrix for Data load.}}{24}{table.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.2}Downsampling}{24}{subsubsection.5.2.2}}
-\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Propagation matrix for Downsampling.}}{24}{table.2}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.3}Ion Information}{24}{subsubsection.5.2.3}}
-\newlabel{sec:FilterIonInformation}{{5.2.3}{24}{Ion Information\relax }{subsubsection.5.2.3}{}}
-\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Propagation matrix for Ion Information.}}{25}{table.3}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.4}Ranging}{25}{subsubsection.5.2.4}}
-\newlabel{sec:rangeFilter}{{5.2.4}{25}{Ranging\relax }{subsubsection.5.2.4}{}}
-\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces Propagation matrix for Ranging.}}{25}{table.4}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.5}Bounding Box}{26}{subsubsection.5.2.5}}
-\@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces Propagation matrix for Bounding Box.}}{26}{table.5}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.6}Clipping}{26}{subsubsection.5.2.6}}
-\@writefile{lot}{\contentsline {table}{\numberline {6}{\ignorespaces Propagation matrix for Clipping.}}{26}{table.6}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.7}Spectrum}{26}{subsubsection.5.2.7}}
-\@writefile{lot}{\contentsline {table}{\numberline {7}{\ignorespaces Propagation matrix for Spectrum.}}{27}{table.7}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.8}Profile}{27}{subsubsection.5.2.8}}
-\@writefile{lot}{\contentsline {table}{\numberline {8}{\ignorespaces Propagation matrix for Profile.}}{27}{table.8}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.9}Spatial Analysis}{27}{subsubsection.5.2.9}}
-\@writefile{toc}{\contentsline {paragraph}{Algorithms}{27}{section*.3}}
-\citation{Stephenson07}
-\citation{Hyde10}
-\citation{Vaumousse03}
-\@writefile{lot}{\contentsline {table}{\numberline {9}{\ignorespaces Propagation matrix for Spatial Analysis.}}{28}{table.9}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.10}Clustering analysis}{28}{subsubsection.5.2.10}}
-\@writefile{lot}{\contentsline {table}{\numberline {10}{\ignorespaces Propagation matrix for Clustering Analysis.}}{29}{table.10}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.11}External Program}{29}{subsubsection.5.2.11}}
-\@writefile{toc}{\contentsline {paragraph}{Command syntax: }{29}{section*.4}}
-\@writefile{toc}{\contentsline {paragraph}{Prior to program execution:}{30}{section*.5}}
-\@writefile{toc}{\contentsline {paragraph}{After program execution:}{30}{section*.6}}
-\@writefile{lot}{\contentsline {table}{\numberline {11}{\ignorespaces Propagation matrix for External Program.}}{30}{table.11}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.12}Annotation}{30}{subsubsection.5.2.12}}
-\@writefile{toc}{\contentsline {paragraph}{Text}{30}{section*.7}}
-\@writefile{toc}{\contentsline {paragraph}{Arrow, Arrow with Text}{31}{section*.8}}
-\@writefile{toc}{\contentsline {paragraph}{Angle Measurement}{31}{section*.9}}
-\@writefile{lot}{\contentsline {table}{\numberline {12}{\ignorespaces Propagation matrix for Annotation.}}{31}{table.12}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.2.13}Voxels}{31}{subsubsection.5.2.13}}
-\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces Voxelisation filter, showing different representations. Left to right shows point cloud, axial slice and isosurface mode on the same dataset}}{32}{figure.19}}
-\newlabel{fig:voxeliseDisplayType}{{19}{32}{Voxelisation filter, showing different representations. Left to right shows point cloud, axial slice and isosurface mode on the same dataset\relax }{figure.19}{}}
-\@writefile{lot}{\contentsline {table}{\numberline {13}{\ignorespaces Propagation matrix for Voxels.}}{32}{table.13}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Ion Colour}{32}{subsection.5.3}}
-\@writefile{lot}{\contentsline {table}{\numberline {14}{\ignorespaces Propagation matrix for Ion Colour.}}{33}{table.14}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Ion Transform}{33}{subsection.5.4}}
-\@writefile{lot}{\contentsline {table}{\numberline {15}{\ignorespaces Propagation matrix for Ion Transform.}}{33}{table.15}}
-\@writefile{toc}{\contentsline {section}{\numberline {6}Attributions}{33}{section.6}}
-\@writefile{toc}{\contentsline {section}{\numberline {7}Licence}{34}{section.7}}
-\@writefile{toc}{\contentsline {section}{\numberline {8}Appendices}{34}{section.8}}
-\newlabel{sec:appendix}{{8}{34}{Appendices\relax }{section.8}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {8.1}Paths}{34}{subsection.8.1}}
-\newlabel{sec:3DepictPaths}{{8.1}{34}{Paths\relax }{subsection.8.1}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {8.2}File formats}{34}{subsection.8.2}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.1}State file}{34}{subsubsection.8.2.1}}
-\newlabel{sec:xmlstatefile}{{8.2.1}{34}{State file\relax }{subsubsection.8.2.1}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.2}Range files}{35}{subsubsection.8.2.2}}
-\newlabel{sec:rangeFormat}{{8.2.2}{35}{Range files\relax }{subsubsection.8.2.2}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.3}POS files}{36}{subsubsection.8.2.3}}
-\newlabel{sec:posformat}{{8.2.3}{36}{POS files\relax }{subsubsection.8.2.3}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.2.4}Text files}{36}{subsubsection.8.2.4}}
-\newlabel{sec:textformat}{{8.2.4}{36}{Text files\relax }{subsubsection.8.2.4}{}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {8.3}External Program Examples}{37}{subsection.8.3}}
-\newlabel{sec:externalProgExample}{{8.3}{37}{External Program Examples\relax }{subsection.8.3}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.1}Scilab}{37}{subsubsection.8.3.1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces Example program screenshot using the \emph  {Scilab} sample script. The \%i value in the command line instructs \emph  {3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program. }}{38}{figure.20}}
-\newlabel{fig:externalProgScilabSample}{{20}{38}{Example program screenshot using the \emph {Scilab} sample script. The \%i value in the command line instructs \emph {3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program}{figure.20}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.2}Python}{41}{subsubsection.8.3.2}}
-\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows.}}{42}{figure.21}}
-\newlabel{fig:externalProgPythonSample}{{21}{42}{Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows}{figure.21}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.3}Bash}{43}{subsubsection.8.3.3}}
-\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces Example program screenshot when using the BASH test example.}}{44}{figure.22}}
-\newlabel{fig:externalProgBashSample}{{22}{44}{Example program screenshot when using the BASH test example}{figure.22}{}}
-\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Example program screenshot without and with the C++ test example present..}}{45}{figure.23}}
-\newlabel{fig:externalProgCppSample}{{23}{45}{Example program screenshot without and with the C++ test example present.}{figure.23}{}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.3.4}C/C++}{45}{subsubsection.8.3.4}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {8.4}Modifying the program}{49}{subsection.8.4}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.1}Development tools}{49}{subsubsection.8.4.1}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.2}Getting yourself set up}{50}{subsubsection.8.4.2}}
-\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.3}Changing stuff}{50}{subsubsection.8.4.3}}
-\bibstyle{unsrt}
-\bibdata{manual}
-\bibcite{Stephenson07}{1}
-\bibcite{Hyde10}{2}
-\bibcite{Vaumousse03}{3}
diff --git a/docs/manual-latex/manual.bbl b/docs/manual-latex/manual.bbl
deleted file mode 100644
index 9846081..0000000
--- a/docs/manual-latex/manual.bbl
+++ /dev/null
@@ -1,21 +0,0 @@
-\begin{thebibliography}{1}
-
-\bibitem{Stephenson07}
-Leigh~T. Stephenson, Michael~P. Moody, Peter~V. Liddicoat, and Simon~P. Ringer.
-\newblock {New Techniques for the Analysis of Fine-Scaled Clustering Phenomena
-  within Atom Probe Tomography (APT) Data}.
-\newblock {\em Microscopy and Microanalysis}, 13(06):448--463, 2007.
-
-\bibitem{Hyde10}
-J.M. Hyde, E.A. Marquis, K.B. Wilford, and T.J. Williams.
-\newblock A sensitivity analysis of the maximum separation method for the
-  characterisation of solute clusters.
-\newblock {\em Ultramicroscopy}, 111(6):440--447, 2011.
-
-\bibitem{Vaumousse03}
-D.~Vaumousse, A.~Cerezo, and P.J. Warren.
-\newblock A procedure for quantification of precipitates microstructures from
-  three-dimensional atom probe data.
-\newblock {\em Ultramicroscopy}, 95:215--221, 2003.
-
-\end{thebibliography}
diff --git a/docs/manual-latex/manual.bib b/docs/manual-latex/manual.bib
index 446401d..89615a2 100644
--- a/docs/manual-latex/manual.bib
+++ b/docs/manual-latex/manual.bib
@@ -1,66 +1,93 @@
- at ARTICLE{Stephenson07,
-  author = {Stephenson,Leigh T. and Moody,Michael P. and Liddicoat,Peter V. and
-	Ringer,Simon P.},
-  title = {{New Techniques for the Analysis of Fine-Scaled Clustering Phenomena
-	within Atom Probe Tomography (APT) Data}},
-  journal = {Microscopy and Microanalysis},
-  year = {2007},
-  volume = {13},
-  pages = {448-463},
-  number = {06},
-  abstract = { ABSTRACT Nanoscale atomic clusters in atom probe tomographic data
-	are not universally defined but instead are characterized by the
-	clustering algorithm used and the parameter values controlling the
-	algorithmic process. A new core-linkage clustering algorithm is developed,
-	combining fundamental elements of the conventional maximum separation
-	method with density-based analyses. A key improvement to the algorithm
-	is the independence of algorithmic parameters inherently unified
-	in previous techniques, enabling a more accurate analysis to be applied
-	across a wider range of material systems. Further, an objective procedure
-	for the selection of parameters based on approximating the data with
-	a model of complete spatial randomness is developed and applied.
-	The use of higher nearest neighbor distributions is highlighted to
-	give insight into the nature of the clustering phenomena present
-	in a system and to generalize the clustering algorithms used to analyze
-	it. Maximum separation, density-based scanning, and the core linkage
-	algorithm, developed within this study, were separately applied to
-	the investigation of fine solute clustering of solute atoms in an
-	Al-1.9Zn-1.7Mg (at.%) at two distinct states of early phase decomposition
-	and the results of these analyses were evaluated. },
-  doi = {10.1017/S1431927607070900},
-  eprint = {http://journals.cambridge.org/article_S1431927607070900},
-  file = {Stephenson_cluster.pdf:/home/user/EMU/work/Literature/Stephenson_cluster.pdf:PDF},
-  url = {http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=1424336&fulltextType=RA&fileId=S1431927607070900}
+% This file was created with JabRef 2.10b2.
+% Encoding: UTF-8
+
+
+ at Article{Boll2007,
+  Title                    = {Investigation of the site occupation of atoms in pure and doped TiAl/Ti3Al intermetallic.},
+  Author                   = {Boll, T. and  Al-Kassab, T. and Yuan, Y. and Liu, Z.G.},
+  Journal                  = {Ultramicroscopy},
+  Year                     = {2007},
+
+  Owner                    = {pcuser},
+  Timestamp                = {2013.10.06}
+}
+
+ at Book{Gault2012,
+  Title                    = {Atom Probe Microscopy},
+  Author                   = {Gault, B. and Moody, M. and Cairney, J. and Ringer S. P.},
+  Publisher                = {Springer},
+  Year                     = {2012},
+  Series                   = {Springer Series in Materials science},
+
+  Owner                    = {pcuser},
+  Timestamp                = {2013.10.06}
+}
+
+ at Article{Geiser2007,
+  Title                    = {Spatial distribution maps for atom probe tomography.},
+  Author                   = {Geiser, B.P. and Kelly, T.F. and Larson, D.J. and Schneir, J. and Roberts, J.P.},
+  Journal                  = {Microscopy and Microanalysis},
+  Year                     = {2007},
+  Number                   = {6},
+  Pages                    = {437-447},
+  Volume                   = {13},
+
+  Owner                    = {pcuser},
+  Timestamp                = {2013.10.06}
 }
 
+ at Article{Hyde10,
+  Title                    = {A sensitivity analysis of the maximum separation method for the characterisation of solute clusters},
+  Author                   = {J.M. Hyde and E.A. Marquis and K.B. Wilford and T.J. Williams},
+  Journal                  = {Ultramicroscopy},
+  Year                     = {2011},
+  Number                   = {6},
+  Pages                    = {440--447 },
+  Volume                   = {111},
+
+  Doi                      = {DOI: 10.1016/j.ultramic.2010.12.015},
+  ISSN                     = {0304-3991},
+  Keywords                 = {Atom probe tomography},
+  Url                      = {http://dx.doi.org/10.1016/j.ultramic.2010.12.015}
+}
 
+ at Article{Moody2008,
+  Title                    = {Quantitative Binomial Distribution Analyses of Nanoscale Like-Solute Atom Clustering and Segregation in Atom Probe Tomography Data },
+  Author                   = {Michael P. Moody and Leigh Stephenson and Anna V. Ceguerra and S. P. Ringer},
+  Year                     = {2008},
+  Number                   = {71},
+  Pages                    = {542-550},
 
- at ARTICLE{vaumousse03,
-  author = {D. Vaumousse and A. Cerezo and P.J. Warren},
-  title = {A procedure for quantification of precipitates microstructures from
-	three-dimensional atom probe data},
-  journal = {Ultramicroscopy},
-  year = {2003},
-  volume = {95},
-  pages = {215-221}
+  Abstract                 = {The applicability of the binomial frequency distribution is outlined for the analysis of the evolution nanoscale atomic clustering of dilute solute in an alloy subject to thermal ageing in 3D atom probe data. The conventional v2 statistics and significance testing are demonstrated to be inappropriate for comparison of quantity of solute segregation present in two or more different sized system. Pearson coefficient, l, is shown to normalize v2 with respect to s [...]
+},
+  Doi                      = {10.1002/jemt.20582},
+  File                     = {:20582_ftp.pdf:PDF},
+  Owner                    = {pcuser},
+  Timestamp                = {2013.10.06}
 }
 
+ at Article{Stephenson07,
+  Title                    = {{New Techniques for the Analysis of Fine-Scaled Clustering Phenomena within Atom Probe Tomography (APT) Data}},
+  Author                   = {Stephenson,Leigh T. and Moody,Michael P. and Liddicoat,Peter V. and Ringer,Simon P.},
+  Journal                  = {Microscopy and Microanalysis},
+  Year                     = {2007},
+  Number                   = {06},
+  Pages                    = {448-463},
+  Volume                   = {13},
 
- at article{Hyde10,
-title = "A sensitivity analysis of the maximum separation method for the characterisation of solute clusters",
-journal = "Ultramicroscopy",
-volume = "111",
-number = "6",
-pages = "440--447 ",
-year = "2011",
-note = "",
-issn = "0304-3991",
-doi = "DOI: 10.1016/j.ultramic.2010.12.015",
-url = "http://dx.doi.org/10.1016/j.ultramic.2010.12.015",
-author = "J.M. Hyde and E.A. Marquis and K.B. Wilford and T.J. Williams",
-keywords = "Atom probe tomography",
-keywords = "Cluster search algorithms",
-keywords = "Maximum separation method"
-}
-
+  Abstract                 = { ABSTRACT Nanoscale atomic clusters in atom probe tomographic data are not universally defined but instead are characterized by the clustering algorithm used and the parameter values controlling the algorithmic process. A new core-linkage clustering algorithm is developed, combining fundamental elements of the conventional maximum separation method with density-based analyses. A key improvement to the algorithm is the independence of algorithmic parameters i [...]
+  Doi                      = {10.1017/S1431927607070900},
+  Eprint                   = {http://journals.cambridge.org/article_S1431927607070900},
+  File                     = {Stephenson_cluster.pdf:/home/user/EMU/work/Literature/Stephenson_cluster.pdf:PDF},
+  Url                      = {http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=1424336&fulltextType=RA&fileId=S1431927607070900}
+}
+
+ at Article{vaumousse03,
+  Title                    = {A procedure for quantification of precipitates microstructures from three-dimensional atom probe data},
+  Author                   = {D. Vaumousse and A. Cerezo and P.J. Warren},
+  Journal                  = {Ultramicroscopy},
+  Year                     = {2003},
+  Pages                    = {215-221},
+  Volume                   = {95}
+}
 
diff --git a/docs/manual-latex/manual.blg b/docs/manual-latex/manual.blg
deleted file mode 100644
index 5776488..0000000
--- a/docs/manual-latex/manual.blg
+++ /dev/null
@@ -1,46 +0,0 @@
-This is BibTeX, Version 0.99d (TeX Live 2012/Debian)
-Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
-The top-level auxiliary file: manual.aux
-The style file: unsrt.bst
-Database file #1: manual.bib
-You've used 3 entries,
-            1791 wiz_defined-function locations,
-            468 strings with 4144 characters,
-and the built_in function-call counts, 780 in all, are:
-= -- 66
-> -- 39
-< -- 0
-+ -- 14
-- -- 11
-* -- 67
-:= -- 133
-add.period$ -- 9
-call.type$ -- 3
-change.case$ -- 3
-chr.to.int$ -- 0
-cite$ -- 3
-duplicate$ -- 27
-empty$ -- 72
-format.name$ -- 11
-if$ -- 166
-int.to.chr$ -- 0
-int.to.str$ -- 3
-missing$ -- 3
-newline$ -- 18
-num.names$ -- 3
-pop$ -- 3
-preamble$ -- 1
-purify$ -- 0
-quote$ -- 0
-skip$ -- 9
-stack$ -- 0
-substring$ -- 67
-swap$ -- 3
-text.length$ -- 0
-text.prefix$ -- 0
-top$ -- 0
-type$ -- 0
-warning$ -- 0
-while$ -- 7
-width$ -- 4
-write$ -- 35
diff --git a/docs/manual-latex/manual.log b/docs/manual-latex/manual.log
deleted file mode 100644
index 44e67df..0000000
--- a/docs/manual-latex/manual.log
+++ /dev/null
@@ -1,569 +0,0 @@
-This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) (format=pdflatex 2012.11.24)  15 JUL 2013 00:17
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**manual.tex
-(./manual.tex
-LaTeX2e <2011/06/27>
-Babel <v3.8m> and hyphenation patterns for english, dumylang, nohyphenation, lo
-aded.
-(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
-(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
-)
-\c at part=\count79
-\c at section=\count80
-\c at subsection=\count81
-\c at subsubsection=\count82
-\c at paragraph=\count83
-\c at subparagraph=\count84
-\c at figure=\count85
-\c at table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/usr/share/texlive/texmf-dist/tex/latex/preprint/fullpage.sty
-Package: fullpage 1999/02/23 1.1 (PWD)
-\FP at margin=\skip43
-)
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
-Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
-
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
-Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
-\KV at toks@=\toks14
-)
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
-Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
-
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
-Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
-)
-(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg
-File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
-)
-Package graphics Info: Driver file: pdftex.def on input line 91.
-
-(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def
-File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
-
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
-Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
-)
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
-Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
-)
-\Gread at gobject=\count87
-))
-\Gin at req@height=\dimen103
-\Gin at req@width=\dimen104
-)
-(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
-\Urlmuskip=\muskip10
-Package: url 2006/04/12  ver 3.3  Verb mode for urls, etc.
-)
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
-Package: hyperref 2012/05/13 v6.82q Hypertext links for LaTeX
-
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
-Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO)
-
-
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
-Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO)
-Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO)
-Package hobsub Info: Skipping package `infwarerr' (already loaded).
-Package hobsub Info: Skipping package `ltxcmds' (already loaded).
-Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
-Package ifluatex Info: LuaTeX not detected.
-Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO)
-Package ifvtex Info: VTeX not detected.
-Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO)
-Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
-Package ifpdf Info: pdfTeX in PDF mode is detected.
-Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
-Package etexcmds Info: Could not find \expanded.
-(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
-(etexcmds)             that some package has redefined \expanded.
-(etexcmds)             In the latter case, load this package earlier.
-Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
-Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
-Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
-)
-Package pdftexcmds Info: LuaTeX not detected.
-Package pdftexcmds Info: \pdf at primitive is available.
-Package pdftexcmds Info: \pdf at ifprimitive is available.
-Package pdftexcmds Info: \pdfdraftmode found.
-Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO)
-Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO
-)
-Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO)
-Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO)
-)
-Package hobsub Info: Skipping package `hobsub' (already loaded).
-Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO)
-Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO)
-Package: xcolor-patch 2011/01/30 xcolor patch
-Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO)
-Package atveryend Info: \enddocument detected (standard20110627).
-Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO)
-Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO)
-Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO)
-)
-(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
-Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
-)
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
-Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
-)
-\@linkdim=\dimen105
-\Hy at linkcounter=\count88
-\Hy at pagecounter=\count89
-
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
-File: pd1enc.def 2012/05/13 v6.82q Hyperref: PDFDocEncoding definition (HO)
-)
-\Hy at SavedSpaceFactor=\count90
-
-(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg
-File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
-)
-Package hyperref Info: Hyper figures OFF on input line 4062.
-Package hyperref Info: Link nesting OFF on input line 4067.
-Package hyperref Info: Hyper index ON on input line 4070.
-Package hyperref Info: Plain pages OFF on input line 4077.
-Package hyperref Info: Backreferencing OFF on input line 4082.
-Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
-Package hyperref Info: Bookmarks ON on input line 4300.
-\c at Hy@tempcnt=\count91
-LaTeX Info: Redefining \url on input line 4653.
-\Fld at menulength=\count92
-\Field at Width=\dimen106
-\Fld at charsize=\dimen107
-Package hyperref Info: Hyper figures OFF on input line 5773.
-Package hyperref Info: Link nesting OFF on input line 5778.
-Package hyperref Info: Hyper index ON on input line 5781.
-Package hyperref Info: backreferencing OFF on input line 5788.
-Package hyperref Info: Link coloring OFF on input line 5793.
-Package hyperref Info: Link coloring with OCG OFF on input line 5798.
-Package hyperref Info: PDF/A mode OFF on input line 5803.
-LaTeX Info: Redefining \ref on input line 5843.
-LaTeX Info: Redefining \pageref on input line 5847.
-\Hy at abspage=\count93
-\c at Item=\count94
-\c at Hfootnote=\count95
-)
-
-Package hyperref Message: Driver (autodetected): hpdftex.
-
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
-File: hpdftex.def 2012/05/13 v6.82q Hyperref driver for pdfTeX
-\Fld at listcount=\count96
-\c at bookmark@seq at number=\count97
-
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
-Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO)
-Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
-82.
-)
-\Hy at SectionHShift=\skip44
-)
-(/usr/share/texlive/texmf-dist/tex/latex/placeins/placeins.sty
-Package: placeins 2005/04/18  v 2.2
-)
-(/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty
-\wrapoverhang=\dimen108
-\WF at size=\dimen109
-\c at WF@wrappedlines=\count98
-\WF at box=\box26
-\WF at everypar=\toks15
-Package: wrapfig 2003/01/31  v 3.6
-) (./manual.aux)
-\openout1 = `manual.aux'.
-
-LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 14.
-LaTeX Font Info:    ... okay on input line 14.
-
-(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii
-[Loading MPS to PDF converter (version 2006.09.02).]
-\scratchcounter=\count99
-\scratchdimen=\dimen110
-\scratchbox=\box27
-\nofMPsegments=\count100
-\nofMParguments=\count101
-\everyMPshowfont=\toks16
-\MPscratchCnt=\count102
-\MPscratchDim=\dimen111
-\MPnumerator=\count103
-\makeMPintoPDFobject=\count104
-\everyMPtoPDFconversion=\toks17
-) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
-Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf
-
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
-Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO)
-)
-Package grfext Info: Graphics extension search list:
-(grfext)             [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE
-G,.JBIG2,.JB2,.eps]
-(grfext)             \AppendGraphicsExtensions on input line 452.
-
-(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
-File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
-e
-))
-\AtBeginShipoutBox=\box28
-Package hyperref Info: Link coloring OFF on input line 14.
-
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
-Package: nameref 2010/04/30 v2.40 Cross-referencing by name of section
-
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
-Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO)
-)
-\c at section@level=\count105
-)
-LaTeX Info: Redefining \ref on input line 14.
-LaTeX Info: Redefining \pageref on input line 14.
-LaTeX Info: Redefining \nameref on input line 14.
-
-(./manual.out) (./manual.out)
-\@outlinefile=\write3
-\openout3 = `manual.out'.
-
-
-<./figures/CoverImage.png, id=337, 1312.905pt x 974.64125pt>
-File: ./figures/CoverImage.png Graphic file (type png)
-
-<use ./figures/CoverImage.png>
-Package pdftex.def Info: ./figures/CoverImage.png used on input line 25.
-(pdftex.def)             Requested size: 469.75502pt x 348.72903pt.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <12> on input line 38.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <8> on input line 38.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <6> on input line 38.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <24.88> on input line 39.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <20.74> on input line 39.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <17.28> on input line 39.
- [1
-
-{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./figures/CoverImage.png>]
- (./manual.toc
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <7> on input line 2.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <5> on input line 2.
- [1
-
-] [2])
-\tf at toc=\write4
-\openout4 = `manual.toc'.
-
- [3]
-<./figures/compilation.pdf, id=450, 489.83pt x 262.58101pt>
-File: ./figures/compilation.pdf Graphic file (type pdf)
-
-<use ./figures/compilation.pdf>
-Package pdftex.def Info: ./figures/compilation.pdf used on input line 77.
-(pdftex.def)             Requested size: 328.82707pt x 176.27693pt.
-
-Underfull \hbox (badness 3260) in paragraph at lines 82--83
-[]\OT1/cmr/m/n/10 Open source pro-grams are
- []
-
-
-Underfull \hbox (badness 6477) in paragraph at lines 82--83
-\OT1/cmr/m/n/10 only the ex-e-cutable code,
- []
-
-pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has 
-been already used, duplicate ignored
-<to be read again> 
-                   \relax 
-l.88 N
-      ote that there are restrictions on what may be done with the program, ...
-[1
-
- <./figures/compilation.pdf>]
-LaTeX Font Info:    Try loading font information for OMS+cmr on input line 104.
-
-
-(/usr/share/texlive/texmf-dist/tex/latex/base/omscmr.fd
-File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
-)
-LaTeX Font Info:    Font shape `OMS/cmr/m/n' in size <10> not available
-(Font)              Font shape `OMS/cmsy/m/n' tried instead on input line 104.
-
-Overfull \hbox (3.63295pt too wide) in paragraph at lines 115--116
-\OT1/cmr/m/n/10 Assistance with this pro-gram may be freely ob-tained over the 
-In-ter-net at []$\OT1/cmtt/m/n/10 http : / / threedepict . sourceforge .
- []
-
-[2] [3] <./figures/interface.png, id=767, 1026.83624pt x 682.55pt>
-File: ./figures/interface.png Graphic file (type png)
-
-<use ./figures/interface.png>
-Package pdftex.def Info: ./figures/interface.png used on input line 148.
-(pdftex.def)             Requested size: 399.29463pt x 265.41231pt.
- [4 <./figures/interface.png>]
-<./figures/camera.pdf, id=774, 579.76598pt x 383.834pt>
-File: ./figures/camera.pdf Graphic file (type pdf)
-
-<use ./figures/camera.pdf>
-Package pdftex.def Info: ./figures/camera.pdf used on input line 171.
-(pdftex.def)             Requested size: 328.82707pt x 217.70413pt.
- [5 <./figures/camera.pdf>]
-<./figures/spectrum-raw.png, id=859, 1199.48125pt x 848.16875pt>
-File: ./figures/spectrum-raw.png Graphic file (type png)
-
-<use ./figures/spectrum-raw.png>
-Package pdftex.def Info: ./figures/spectrum-raw.png used on input line 201.
-(pdftex.def)             Requested size: 399.29463pt x 282.34259pt.
-
-<./figures/console.png, id=862, 1199.48125pt x 848.16875pt>
-File: ./figures/console.png Graphic file (type png)
-
-<use ./figures/console.png>
-Package pdftex.def Info: ./figures/console.png used on input line 218.
-(pdftex.def)             Requested size: 399.29463pt x 282.34259pt.
- [6 <./figures/spectrum-raw.png>] [7 <./figures/console.png>] [8] <./figures/ra
-ngeDropdown.png, id=886, 954.56625pt x 804.00375pt>
-File: ./figures/rangeDropdown.png Graphic file (type png)
-
-<use ./figures/rangeDropdown.png>
-Package pdftex.def Info: ./figures/rangeDropdown.png used on input line 284.
-(pdftex.def)             Requested size: 399.29463pt x 336.30525pt.
-
-
-LaTeX Warning: `h' float specifier changed to `ht'.
-
-[9] <./figures/rangedSpectrum.png, id=896, 1087.06125pt x 625.33624pt>
-File: ./figures/rangedSpectrum.png Graphic file (type png)
-
-<use ./figures/rangedSpectrum.png>
-Package pdftex.def Info: ./figures/rangedSpectrum.png used on input line 303.
-(pdftex.def)             Requested size: 399.29463pt x 229.70096pt.
-
-
-LaTeX Warning: `h' float specifier changed to `ht'.
-
-<./figures/rangedSpectrumCloud.png, id=899, 1087.06125pt x 625.33624pt>
-File: ./figures/rangedSpectrumCloud.png Graphic file (type png)
-
-<use ./figures/rangedSpectrumCloud.png>
-Package pdftex.def Info: ./figures/rangedSpectrumCloud.png used on input line 3
-14.
-(pdftex.def)             Requested size: 399.29463pt x 229.70096pt.
-
-
-LaTeX Warning: `h' float specifier changed to `ht'.
-
-<./figures/quickStartConcLayout.png, id=902, 1373.13pt x 905.3825pt>
-File: ./figures/quickStartConcLayout.png Graphic file (type png)
-
-<use ./figures/quickStartConcLayout.png>
-Package pdftex.def Info: ./figures/quickStartConcLayout.png used on input line 
-326.
-(pdftex.def)             Requested size: 399.29463pt x 263.27258pt.
- [10 <./figures/rangeDropdown.png (PNG copy)>]
-
-LaTeX Warning: `h' float specifier changed to `ht'.
-
-<./figures/quickStartIonInfoLayout.png, id=912, 869.2475pt x 629.35126pt>
-File: ./figures/quickStartIonInfoLayout.png Graphic file (type png)
-
-<use ./figures/quickStartIonInfoLayout.png>
-Package pdftex.def Info: ./figures/quickStartIonInfoLayout.png used on input li
-ne 340.
-(pdftex.def)             Requested size: 399.29463pt x 289.10176pt.
-
-
-LaTeX Warning: `h' float specifier changed to `ht'.
-
-[11 <./figures/rangedSpectrum.png>] [12 <./figures/rangedSpectrumCloud.png> <./
-figures/quickStartConcLayout.png>] [13 <./figures/quickStartIonInfoLayout.png>]
-<./figures/generic-filter.png, id=932, 4353.20471pt x 2563.45941pt>
-File: ./figures/generic-filter.png Graphic file (type png)
-
-<use ./figures/generic-filter.png>
-Package pdftex.def Info: ./figures/generic-filter.png used on input line 365.
-(pdftex.def)             Requested size: 399.29463pt x 235.12141pt.
- [14
-
- <./figures/generic-filter.png>]
-<./figures/tree-propagate.pdf, id=942, 1518.55293pt x 800.81699pt>
-File: ./figures/tree-propagate.pdf Graphic file (type pdf)
-
-<use ./figures/tree-propagate.pdf>
-Package pdftex.def Info: ./figures/tree-propagate.pdf used on input line 384.
-(pdftex.def)             Requested size: 399.29463pt x 210.56586pt.
-
-<./figures/Stash-operation.png, id=944, 1068.99374pt x 608.2725pt>
-File: ./figures/Stash-operation.png Graphic file (type png)
-
-<use ./figures/Stash-operation.png>
-Package pdftex.def Info: ./figures/Stash-operation.png used on input line 406.
-(pdftex.def)             Requested size: 399.29463pt x 227.20132pt.
- [15 <./figures/tree-propagate.pdf>]
-[16 <./figures/Stash-operation.png>] [17]
-<./figures/exportanimDialogFilterView.png, id=1271, 1380.15625pt x 800.9925pt>
-File: ./figures/exportanimDialogFilterView.png Graphic file (type png)
-
-<use ./figures/exportanimDialogFilterView.png>
-Package pdftex.def Info: ./figures/exportanimDialogFilterView.png used on input
- line 470.
-(pdftex.def)             Requested size: 422.77664pt x 245.35957pt.
-
-<./figures/exportanimParamDialog.png, id=1272, 1376.14125pt x 801.99625pt>
-File: ./figures/exportanimParamDialog.png Graphic file (type png)
-
-<use ./figures/exportanimParamDialog.png>
-Package pdftex.def Info: ./figures/exportanimParamDialog.png used on input line
- 480.
-(pdftex.def)             Requested size: 422.77664pt x 246.38904pt.
-
-<./figures/exportanimDialogConflict.png, id=1274, 1382.16376pt x 801.99625pt>
-File: ./figures/exportanimDialogConflict.png Graphic file (type png)
-
-<use ./figures/exportanimDialogConflict.png>
-Package pdftex.def Info: ./figures/exportanimDialogConflict.png used on input l
-ine 490.
-(pdftex.def)             Requested size: 422.77664pt x 245.31215pt.
- [18] [19 <./figures/exportanimDialogFilterView.png (PNG copy)> <./figures/expo
-rtanimParamDialog.png (PNG copy)>]
-<./figures/exportanimDialogPropString.png, id=1286, 1237.62375pt x 763.85374pt>
-File: ./figures/exportanimDialogPropString.png Graphic file (type png)
-<use ./figures/exportanimDialogPropString.png>
-Package pdftex.def Info: ./figures/exportanimDialogPropString.png used on input
- line 502.
-(pdftex.def)             Requested size: 422.77664pt x 260.93065pt.
-
-<./figures/exportanimDialogFrameView.png, id=1287, 1237.62375pt x 763.85374pt>
-File: ./figures/exportanimDialogFrameView.png Graphic file (type png)
-
-<use ./figures/exportanimDialogFrameView.png>
-Package pdftex.def Info: ./figures/exportanimDialogFrameView.png used on input 
-line 516.
-(pdftex.def)             Requested size: 422.77664pt x 260.93065pt.
- [20 <./figures/exportanimDialogConflict.png (PNG copy)>] [21 <./figures/export
-animDialogPropString.png (PNG copy)> <./figures/exportanimDialogFrameView.png (
-PNG copy)>] [22] [23] [24]
-[25] [26] [27] [28] [29] [30]
-<./figures/voxel-representations.png, id=1371, 1615.03375pt x 1027.84pt>
-File: ./figures/voxel-representations.png Graphic file (type png)
-
-<use ./figures/voxel-representations.png>
-Package pdftex.def Info: ./figures/voxel-representations.png used on input line
- 1036.
-(pdftex.def)             Requested size: 422.77664pt x 269.06708pt.
- [31]
-
-LaTeX Warning: `!h' float specifier changed to `!ht'.
-
-[32 <./figures/voxel-representations.png>] [33] [34] [35] [36]
-<./figures/externalProgScilab.png, id=1423, 1686.3pt x 847.165pt>
-File: ./figures/externalProgScilab.png Graphic file (type png)
-
-<use ./figures/externalProgScilab.png>
-Package pdftex.def Info: ./figures/externalProgScilab.png used on input line 12
-82.
-(pdftex.def)             Requested size: 422.77664pt x 212.38535pt.
- [37] [38 <./figures/externalProgScilab.png>] [39] [40]
-<./figures/externalProgPython.png, id=1444, 1465.475pt x 856.19875pt>
-File: ./figures/externalProgPython.png Graphic file (type png)
-
-<use ./figures/externalProgPython.png>
-Package pdftex.def Info: ./figures/externalProgPython.png used on input line 14
-63.
-(pdftex.def)             Requested size: 399.29463pt x 233.28014pt.
- [41] [42 <./figures/externalProgPython.png>] <./figures/externalProgBash.png, 
-id=1457, 1385.175pt x 876.27374pt>
-File: ./figures/externalProgBash.png Graphic file (type png)
-
-<use ./figures/externalProgBash.png>
-Package pdftex.def Info: ./figures/externalProgBash.png used on input line 1537
-.
-(pdftex.def)             Requested size: 399.29463pt x 252.5886pt.
- [43] [44 <./figures/externalProgBash.png>]
-LaTeX Font Info:    Try loading font information for OMS+cmtt on input line 159
-4.
-LaTeX Font Info:    No file OMScmtt.fd. on input line 1594.
-
-LaTeX Font Warning: Font shape `OMS/cmtt/m/n' undefined
-(Font)              using `OMS/cmsy/m/n' instead
-(Font)              for symbol `textbraceleft' on input line 1594.
-
-<./figures/externalProgCpp.png, id=1468, 2123.935pt x 839.135pt>
-File: ./figures/externalProgCpp.png Graphic file (type png)
-
-<use ./figures/externalProgCpp.png>
-Package pdftex.def Info: ./figures/externalProgCpp.png used on input line 1602.
-
-(pdftex.def)             Requested size: 399.29463pt x 157.74715pt.
- [45 <./figures/externalProgCpp.png>]
-[46] [47] [48] [49] [50] (./manual.bbl)
-Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1847.
- [51]
-Package atveryend Info: Empty hook `AfterLastShipout' on input line 1847.
- (./manual.aux)
-Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1847.
-Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1847.
-
-Package rerunfilecheck Info: File `manual.out' has not changed.
-(rerunfilecheck)             Checksum: 2391597B6536F7B9377565452E4D63E0;5463.
-
-
-LaTeX Font Warning: Some font shapes were not available, defaults substituted.
-
-Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1847.
- ) 
-Here is how much of TeX's memory you used:
- 5553 strings out of 495059
- 84276 string characters out of 3182029
- 165875 words of memory out of 3000000
- 8475 multiletter control sequences out of 15000+200000
- 12804 words of font info for 45 fonts, out of 3000000 for 9000
- 14 hyphenation exceptions out of 8191
- 29i,11n,28p,1037b,445s stack positions out of 5000i,500n,10000p,200000b,50000s
-</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></us
-r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/shar
-e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbxti10.pfb></usr/share/te
-xlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmcsc10.pfb></usr/share/texlive
-/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf
--dist/fonts/type1/public/amsfonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist/f
-onts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/ty
-pe1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/type1/pub
-lic/amsfonts/cm/cmr6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsf
-onts/cm/cmr7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/
-cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.p
-fb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti10.pfb></u
-sr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti12.pfb></usr/sha
-re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt10.pfb></usr/share/tex
-live/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt12.pfb></usr/share/texlive/t
-exmf-dist/fonts/type1/public/amsfonts/cm/cmtt8.pfb>
-Output written on manual.pdf (55 pages, 4248400 bytes).
-PDF statistics:
- 1611 PDF objects out of 1728 (max. 8388607)
- 1243 compressed objects within 13 object streams
- 195 named destinations out of 1000 (max. 500000)
- 785 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/docs/manual-latex/manual.out b/docs/manual-latex/manual.out
deleted file mode 100644
index ae19109..0000000
--- a/docs/manual-latex/manual.out
+++ /dev/null
@@ -1,83 +0,0 @@
-\BOOKMARK [1][-]{section.1}{Foreword}{}% 1
-\BOOKMARK [2][-]{subsection.1.1}{Introduction}{section.1}% 2
-\BOOKMARK [3][-]{subsubsection.1.1.1}{Background}{subsection.1.1}% 3
-\BOOKMARK [3][-]{subsubsection.1.1.2}{What is Open Source?}{subsection.1.1}% 4
-\BOOKMARK [2][-]{subsection.1.2}{Requirements}{section.1}% 5
-\BOOKMARK [2][-]{subsection.1.3}{Platform specific notes}{section.1}% 6
-\BOOKMARK [2][-]{subsection.1.4}{Getting help}{section.1}% 7
-\BOOKMARK [2][-]{subsection.1.5}{Who wrote this program?}{section.1}% 8
-\BOOKMARK [2][-]{subsection.1.6}{Alternate documentation}{section.1}% 9
-\BOOKMARK [2][-]{subsection.1.7}{Helping out}{section.1}% 10
-\BOOKMARK [1][-]{section.2}{Basics}{}% 11
-\BOOKMARK [2][-]{subsection.2.1}{Getting started}{section.2}% 12
-\BOOKMARK [3][-]{subsubsection.2.1.1}{Licence}{subsection.2.1}% 13
-\BOOKMARK [3][-]{subsubsection.2.1.2}{Installing the program}{subsection.2.1}% 14
-\BOOKMARK [2][-]{subsection.2.2}{Understanding the interface}{section.2}% 15
-\BOOKMARK [3][-]{subsubsection.2.2.1}{The 3D View}{subsection.2.2}% 16
-\BOOKMARK [3][-]{subsubsection.2.2.2}{Plot area}{subsection.2.2}% 17
-\BOOKMARK [3][-]{subsubsection.2.2.3}{Console}{subsection.2.2}% 18
-\BOOKMARK [3][-]{subsubsection.2.2.4}{Tools panel}{subsection.2.2}% 19
-\BOOKMARK [2][-]{subsection.2.3}{Usage fundamentals}{section.2}% 20
-\BOOKMARK [1][-]{section.3}{Quick start}{}% 21
-\BOOKMARK [2][-]{subsection.3.1}{Loading data}{section.3}% 22
-\BOOKMARK [2][-]{subsection.3.2}{Loading an analysis}{section.3}% 23
-\BOOKMARK [2][-]{subsection.3.3}{Ranging}{section.3}% 24
-\BOOKMARK [2][-]{subsection.3.4}{Spectrum}{section.3}% 25
-\BOOKMARK [2][-]{subsection.3.5}{Composition profiles}{section.3}% 26
-\BOOKMARK [2][-]{subsection.3.6}{Counting Points and measuring volume}{section.3}% 27
-\BOOKMARK [2][-]{subsection.3.7}{Concentration surface and slices}{section.3}% 28
-\BOOKMARK [1][-]{section.4}{Understanding the program}{}% 29
-\BOOKMARK [2][-]{subsection.4.1}{Filters}{section.4}% 30
-\BOOKMARK [2][-]{subsection.4.2}{Trees}{section.4}% 31
-\BOOKMARK [2][-]{subsection.4.3}{Stashes}{section.4}% 32
-\BOOKMARK [2][-]{subsection.4.4}{Plots}{section.4}% 33
-\BOOKMARK [2][-]{subsection.4.5}{Cameras}{section.4}% 34
-\BOOKMARK [2][-]{subsection.4.6}{Effects}{section.4}% 35
-\BOOKMARK [2][-]{subsection.4.7}{Program actions}{section.4}% 36
-\BOOKMARK [3][-]{subsubsection.4.7.1}{Save}{subsection.4.7}% 37
-\BOOKMARK [3][-]{subsubsection.4.7.2}{Undo}{subsection.4.7}% 38
-\BOOKMARK [3][-]{subsubsection.4.7.3}{Raw Data}{subsection.4.7}% 39
-\BOOKMARK [3][-]{subsubsection.4.7.4}{Export Menu}{subsection.4.7}% 40
-\BOOKMARK [3][-]{subsubsection.4.7.5}{Autosave}{subsection.4.7}% 41
-\BOOKMARK [3][-]{subsubsection.4.7.6}{Export Animation}{subsection.4.7}% 42
-\BOOKMARK [1][-]{section.5}{Detailed Reference}{}% 43
-\BOOKMARK [2][-]{subsection.5.1}{Data types}{section.5}% 44
-\BOOKMARK [3][-]{subsubsection.5.1.1}{Ions}{subsection.5.1}% 45
-\BOOKMARK [3][-]{subsubsection.5.1.2}{Plots}{subsection.5.1}% 46
-\BOOKMARK [3][-]{subsubsection.5.1.3}{Range}{subsection.5.1}% 47
-\BOOKMARK [3][-]{subsubsection.5.1.4}{Voxels}{subsection.5.1}% 48
-\BOOKMARK [3][-]{subsubsection.5.1.5}{Drawables}{subsection.5.1}% 49
-\BOOKMARK [2][-]{subsection.5.2}{Filters}{section.5}% 50
-\BOOKMARK [3][-]{subsubsection.5.2.1}{Data load}{subsection.5.2}% 51
-\BOOKMARK [3][-]{subsubsection.5.2.2}{Downsampling}{subsection.5.2}% 52
-\BOOKMARK [3][-]{subsubsection.5.2.3}{Ion Information}{subsection.5.2}% 53
-\BOOKMARK [3][-]{subsubsection.5.2.4}{Ranging}{subsection.5.2}% 54
-\BOOKMARK [3][-]{subsubsection.5.2.5}{Bounding Box}{subsection.5.2}% 55
-\BOOKMARK [3][-]{subsubsection.5.2.6}{Clipping}{subsection.5.2}% 56
-\BOOKMARK [3][-]{subsubsection.5.2.7}{Spectrum}{subsection.5.2}% 57
-\BOOKMARK [3][-]{subsubsection.5.2.8}{Profile}{subsection.5.2}% 58
-\BOOKMARK [3][-]{subsubsection.5.2.9}{Spatial Analysis}{subsection.5.2}% 59
-\BOOKMARK [3][-]{subsubsection.5.2.10}{Clustering analysis}{subsection.5.2}% 60
-\BOOKMARK [3][-]{subsubsection.5.2.11}{External Program}{subsection.5.2}% 61
-\BOOKMARK [3][-]{subsubsection.5.2.12}{Annotation}{subsection.5.2}% 62
-\BOOKMARK [3][-]{subsubsection.5.2.13}{Voxels}{subsection.5.2}% 63
-\BOOKMARK [2][-]{subsection.5.3}{Ion Colour}{section.5}% 64
-\BOOKMARK [2][-]{subsection.5.4}{Ion Transform}{section.5}% 65
-\BOOKMARK [1][-]{section.6}{Attributions}{}% 66
-\BOOKMARK [1][-]{section.7}{Licence}{}% 67
-\BOOKMARK [1][-]{section.8}{Appendices}{}% 68
-\BOOKMARK [2][-]{subsection.8.1}{Paths}{section.8}% 69
-\BOOKMARK [2][-]{subsection.8.2}{File formats}{section.8}% 70
-\BOOKMARK [3][-]{subsubsection.8.2.1}{State file}{subsection.8.2}% 71
-\BOOKMARK [3][-]{subsubsection.8.2.2}{Range files}{subsection.8.2}% 72
-\BOOKMARK [3][-]{subsubsection.8.2.3}{POS files}{subsection.8.2}% 73
-\BOOKMARK [3][-]{subsubsection.8.2.4}{Text files}{subsection.8.2}% 74
-\BOOKMARK [2][-]{subsection.8.3}{External Program Examples}{section.8}% 75
-\BOOKMARK [3][-]{subsubsection.8.3.1}{Scilab}{subsection.8.3}% 76
-\BOOKMARK [3][-]{subsubsection.8.3.2}{Python}{subsection.8.3}% 77
-\BOOKMARK [3][-]{subsubsection.8.3.3}{Bash}{subsection.8.3}% 78
-\BOOKMARK [3][-]{subsubsection.8.3.4}{C/C++}{subsection.8.3}% 79
-\BOOKMARK [2][-]{subsection.8.4}{Modifying the program}{section.8}% 80
-\BOOKMARK [3][-]{subsubsection.8.4.1}{Development tools}{subsection.8.4}% 81
-\BOOKMARK [3][-]{subsubsection.8.4.2}{Getting yourself set up}{subsection.8.4}% 82
-\BOOKMARK [3][-]{subsubsection.8.4.3}{Changing stuff}{subsection.8.4}% 83
diff --git a/docs/manual-latex/manual.pdf b/docs/manual-latex/manual.pdf
index b0e8788..31a9433 100644
Binary files a/docs/manual-latex/manual.pdf and b/docs/manual-latex/manual.pdf differ
diff --git a/docs/manual-latex/manual.tex b/docs/manual-latex/manual.tex
index 7c0e5c6..7f4580c 100644
--- a/docs/manual-latex/manual.tex
+++ b/docs/manual-latex/manual.tex
@@ -40,7 +40,7 @@
 \begin{minipage}{0.3\textwidth}
 \begin{flushright} \large
 \emph{Version:} \\
- 0.0.14, Aug 2013\end{flushright}
+ 0.0.15, Nov 2013\end{flushright}
 \end{minipage}
 
 \vfill
@@ -133,12 +133,12 @@ We would always appreciate assistance with this work. You don't have to be able
 \subsection{Getting started}
 \subsubsection{Licence}
 \label{sec:licence} 
-This program is distributed under the GNU General Public Licence Version 3 (GPLV3+), an \textit{open-source} licence. Information on the copyright of this program is available under the \texttt{COPYING} file in the program directory, or online (\emph{e.g.}\ \url{http://www.gnu.org/licenses/gpl-3.0.txt}).
+This program is distributed under the GNU General Public Licence Version 3 (GPLV3+), an \textit{open-source} licence. Information on the copyright of this program is available under the \texttt{COPYING} file in the program directory, or online (\emph{e.g.}\ \url{http://www.gnu.org/licenses/gpl-3.0.txt} or \url{https://en.wikipedia.org/wiki/GPLv3}).
 
-The basic premise is that you may copy the program, modify and distribute such modified versions or derivative works only under the same licence. The licence forbids technical restrictions on users further redistributing the program.
+The basic premise is that you may copy the program, modify and distribute such modified versions or derivative works only under the same licence, whether a part or the entirety of the program is used. The licence forbids technical restrictions on users further redistributing the program.
  
 \subsubsection{Installing the program}
-The installation method for the program depends upon your chosen operating system. The most up-to-date notes are available on the project website. It is highly recommended that, in general, you do not simply download random programs from the Internet and execute them if a version is available in a trusted software repository. 
+The installation method for the program depends upon your chosen operating system. The most up-to-date notes are available on the project website. It is highly recommended that, in general, you do not simply download random programs from the Internet and execute them if a version is available in a trusted software repository.  At time of writing (Oct, 2013), installers are available for windows, Debian and Fedora-like linuxes, and some versions of Mac OSX.
 
 \subsection{Understanding the interface}
 The program interface consists of three different views. On the left, there is the data, cameras and tools panes, with are used to generate data for visualisation, and to provide an interface into changing properties in a structured manner. On the right, the view is split into two sections; at the top, there is the 3D view. At the bottom are the plotting, raw data and console output panels.  
@@ -157,6 +157,26 @@ Each pane may be hidden, either by double clicking the ``sash'' between the two
 
 At the very bottom of the program, a status bar is shown -- here messages are shown to provide hints on how to use the program, or to communicate information relating to the program's internal state. 
 
+\subsubsection{The Filter Tree}
+Understanding the filter tree is very important to being able to use \emph{3Depict} to meet your needs. The reason it is called a tree, is because it is a graphical representation of the mathematical ``Tree'' - where each node in the tree can have a ``parent'', or several ``child'' nodes.  In \emph{3Depict}, each node in the tree is called a ``filter'' --- the filter modifies data coming from its parent in some manner specific to the type of filter, and the options chosen for that filter.
+
+\begin{figure}[ht]
+  \centering
+ \includegraphics[width=0.6 \textwidth,keepaspectratio=true]{./figures/tree-layout.png}
+ % camera.pdf: 578x382 pixel, 72dpi, 20.39x13.48 cm, bb=0 0 578 382
+
+ \caption{General concept for the tree layout. Trees have ``parent'' and ``child'' relationships betwene members}
+\label{fig:treelayout}
+\end{figure}
+
+The filter tree is quite important in \emph{3Depict}, and the ability to change it is also a very powerful tool. You can copy, move (by dragging the nodes) or even store sections of the tree (by using the ``stash'' panel) , allowing you to assemble the tree in whatever manner you find useful to your analysis. Using the tree is discussed in more detail in Section~\ref{sec:treebehaviour}. You can also change the names of the filters to help you identify which filter is which, simply by cli [...]
+
+The filter tree may, depending on how it is laid out, show small warning symbols next to the tree - these usually indicate that you have built the tree in a manner which may be either non-helpful (\emph{e.g.} the output of one filter cannot be used by the other), or that the configuration might generate misleading results. There are currently two levels for this - ``Error'' and ``Warning''. Warnings can be ignored safely if you know what they mean - for example you might be attempting to [...]
+
+Not all incorrect configurations are warned about -- you must think about the construction of the tree carefully when working with the program. Different structures can generate radically different results.
+
+
+
 
 \FloatBarrier
 \subsubsection{The 3D View}
@@ -262,7 +282,7 @@ Once an item is added, the filter tree is thus modified and a recomputation of t
 
 
 \section{Quick start}
-Several quick notes are provided here as examples of how to perform specific measurements/calcuations. Whilst this is not an exhaustive list of measurements that can be made in \emph{3Depict}, this section is targeted towards new users who wish to use the program to perform quick or common measurments.
+Several quick notes are provided here as examples of how to perform specific measurements/calculations. Whilst this is not an exhaustive list of measurements that can be made in \emph{3Depict}, this section is targeted towards new users who wish to use the program to perform quick or common measurements.
 
 \subsection{Loading data}
 \label{sec:quickStartLoadData}
@@ -273,7 +293,7 @@ You may have an existing analysis file, which you can use to load both the data,
 
 To load it, you require a ``package'' from the previous user, which will be a folder containing a XML file, and any data files that are required. As for loading data, you can either directly open the analysis with File$\rightarrow$Open, or by dropping it onto the program. 
 
-Note that by default, the program will not load all the data in the file - a sampling will be performed. Careful use of data sampling will allow for a much more rapid and interactive analysis of large datasets - many of the algorithms running times do not scale directly with the size of the dataset. Reducing the number of ions can, in some cases, result in a signfificant reduction in run time (eg halving number of ions for some algoritms can result in a run time of a quarter required for [...]
+Note that by default, the program will not load all the data in the file - a sampling will be performed. Careful use of data sampling will allow for a much more rapid and interactive analysis of large datasets - many of the algorithms running times do not scale directly with the size of the dataset. Reducing the number of ions can, in some cases, result in a significant reduction in run time (\emph{e.g.} halving the number of ions for some algorithms can result in a run time of a quarter [...]
 
 \subsection{Ranging}
 \label{sec:quickStartRangedData}
@@ -288,7 +308,7 @@ The program can be used to mark particular sections of the spectrum as belonging
 \end{figure}
 
 
-To perform ranging, you must first have a valid rangefile. As of time of writing, (July, 2013 - 0.0.14), the program is unable to generate these. It is possible to write the file by hand, or using a separate program - details on manually writing the file can be found in Section~\ref{sec:rangeFormat}.
+To perform ranging, you must first have a valid rangefile. As of time of writing, (July, 2013 - 0.0.14), the program is unable to generate these from the UI. It is possible to write the file by hand, or using a separate program - details on manually writing the file can be found in Section~\ref{sec:rangeFormat}.
 
 To perform ranging, the data must be first loaded into the program. The range information can be loaded in two ways, by dropping a valid rangefile onto the program, or by using the filter dropdown (Figure~\ref{fig:rangeDropdown}), whereby a window will open that will allow for the selection of a valid range file. 
 
@@ -351,14 +371,14 @@ To generate iso-concentration surfaces, or to create 2D slices in your data for
 
 Load some ranged data (Section~\ref{sec:quickStartRangedData}), and then select the range filter and choose ``Voxelisation''. This will cause the dataset to disappear until you configure the voxelisation parameters appropriately. To compute a concentration field, change the normalisation mode to ``All ions (Conc)'', then select the ions that are to be included.  To visualise the result, change the ``representation'' mode to either isosurface or 2D slice. The upper and lower bounds of the [...]
 
-However, for the isosurface one must choose the value that the isosurface is spanning. For non-concentration modes, after computation of the voxel field, the upper and lower bounds of the field are shown in the console window, and can aid in selecting the desired isosurface value.
+However, for the isosurface one must choose the value that the isosurface is spanning. For non-concentration modes, after computation of the voxel field, the upper and lower bounds of the field are shown in the console window, and can aid in selecting the desired isosurface value. For normalised modes (\emph{i.e.} concentration), one would set the values between 0 and 1.
 
 \FloatBarrier
 
 \section{Understanding the program}
 \subsection{Filters}
 
-Filters form the key component of the program. These are the tools by which data is analysed and modified, in order to generate the visual representation that is needed by the end users. The basic idea behind a filter is that each filter may perform arbitrary operations on ``data streams''. These data streams are sent to and from each filter, flowing through the tree.
+Filters form \emph{the} key component of the program. These are the tools by which data is analysed and modified, in order to generate the visual representation that is needed by the end users. The basic idea behind a filter is that each filter may perform arbitrary operations on ``data streams''. These data streams are sent to and from each filter, flowing through the tree.
 
 \begin{figure}[htp]
  \centering
@@ -455,8 +475,40 @@ More complex, filter based animations are covered in more detail in~\ref{sec:ani
 
 Finally one can export the entire analysis state, including all required data using the export analysis package option. This will create  a folder which contains all the files needed to reproduce the current program state elsewhere. Note that this imports all referenced data files, so the package can become quite large, but should be fully portable to any other system by simply copying the created folder. Inside the folder, the program state will be stored as a state file, and can be acc [...]
 
+\subsubsection{Ranging dialog}
+The ranging dialog allows for the complete editing of range files within the program. The range files can be arbitrarily modified, as desired. To access the range dialog, this can be obtained from the Edit->Range menu. However, this is only accessible if there are range and spectra available from within the range tree. Note that, at this time (0.0.15), the altered ranges will not be persistent between 3Depict sessions. An initial range file that can be loaded into the filter tree is requ [...]
+
+The dialog is split in two, with a tab panel on the left and a spectrum on the right. If there are several spectra that are rangeable, the spectrum can be selected from the tab panel. Once selected, any existing ranges can be moved and interacted with using the right hand view. Unlike the ranging area, the ranges shown in the spectrum can be moved arbitrarily - \emph{i.e.}, they may overlap, or otherwise be moved past one another. This allows for completely unconstrained editing of the s [...]
+
+New species and ranges can be added using the Add/Remove buttons in the ``Ranges'' tab. First select the grid you wish to edit, then add the new range. Note that if the range is not fully specified, it will be highlighted in the grid - you must set each field in the grid prior to use. 
+
+
+\begin{figure}
+\begin{center}
+ \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/rangeedit-clash.png}
+ \caption{Range editing dialog, showing clash between species}
+\label{fig:rangeEditClash}
+\end{center}
+\end{figure}
+
+
+From the overlay tab, custom ``molecular'' combinations can be shown on the plot as stick markers, each stick's amplitude shows the natural abundance for the predicted isotopes\footnote{This is set by the naturalAbundance.xml file. Customised abundances can be set there, \emph{e.g.} for isotopic studies.}. To specify a multiple ion, you need to provide the chemical formula in the tab. In Figure~\ref{fig:rangeEditOverlay}, the species ``TiO'' is shown. Similarly, ions such as ``TiO2'' ($\ [...]
+
+
+\begin{figure}
+\begin{center}
+ \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/rangeEditOverlay.png}
+ \caption{Range editing dialog, showing molecular overlays.}
+\label{fig:rangeEditOverlay}
+\end{center}
+\end{figure}
+
+
+
+
+
 \subsubsection{Autosave}
-The program will generate an autosave file periodically. If the program crashes, it will look for an autosave file and prompt you to restore it. Note that only the program settings are saved, not the intermediate data, so recomputation will be necessary. If the autosave fails to load, then the autosave file will be archived in your 3depict configuration folder; in this case, please consider sending the failed file to the developers. For configuration locations, see the paths Section~\ref [...]
+The program will generate an autosave file periodically. If the program crashes, it will look for an autosave file and prompt you to restore it. Note that only the program settings are saved, not the intermediate data, so recomputation will be necessary. If the autosave fails to load, then the autosave file will be archived in your 3Depict configuration folder; in this case, please consider sending the failed file to the developers. For configuration locations, see the paths Section~\ref [...]
 
 
 \subsubsection{Export Animation}
@@ -849,8 +901,17 @@ Drawable will be emitted if the ``Show Primitive'' option is selected.
 \item \textbf{Local Density}: This computes the local density of the ions on either a nearest neighbour, or a fixed distance metric. The density is then assigned as the point value. Note that the number of points to be examined increases rapidly in the fixed distance metric, and may rapidly become untenable. Clipping the volume of data to reduce the time is an option, however surface effects can occur.
 \item \textbf{Density filtering}: computes density as per local density, however ions are retained (or not) depending upon a chosen cutoff density,  whilst retaining the original point value.
 \item \textbf{Radial distribution}: Computes the local environment for each ion, and generates a histogram of the number of points within a spherical section surrounding each ion. 
+\item \textbf{Axial distribution} : Computes the so-called ``directional RDF'' or 1D RDF, which can be used to measure spatial correlations between points. 
+\item \textbf{Binomial distribution} : Computes the binomial distribution probabilities for the dataset, using the method of Moody et al~\cite{Moody2008}.
 \end{itemize}
 
+Local density and density filtering algorithms are relatively simple, and mostly are self-contained concepts. This can be used to identify the local density in your dataset, which in the case of APT, originates due to limitations in the technique. For the Radial Distribution Function (RDF) algorithm , this can be used to examine local correlations between points, which may or may not exist in your dataset. The  RDF technique is covered in several standard textbooks on APT~\cite{Gault2012}. 
+
+Axial distribution functions are covered in technical literature where they find use in APT and be referred to via a number of differing names, such as ``SDM''s~\cite{Geiser2007}, atom-vicinity~\cite{Boll2007}, or directional pair-correlation functions. The axial distribution function implementation in 3Depict, allows for users to select and drag out the region to be analysed, with the axis of the cylinder providing both the cropping orientation and the axial direction in which to perfor [...]
+
+The binomial distribution function can be used to test for randomness in the spatial distribution of the points. The program computes a ``p'' value, which is the probability that the observed data was drawn from a  randomly distributed (at the scale of the analysis) set of values on fixed data points. Grouping is performed by a grid-extrusion algorithm, which assigns each set of points in the dataset to a given bin, and thus a given count in the output histogram. The output histogram sho [...]
+
+
 {%
 \newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
 \begin{table}[!h]
@@ -874,6 +935,8 @@ Voxel & No & No & No \\
 }%
 
 Ion, plot and range emit and usage patterns are dependant upon the selected algorithm. Local density and density filtering do not emit plots, and density filtering does allow range propagation.
+
+
 \FloatBarrier
 \subsubsection{Clustering analysis}
 
@@ -1064,7 +1127,7 @@ Voxel & Yes & No & Yes\\
 \end{table}
 }%
 \FloatBarrier
-\subsection{Ion Colour}
+\subsubsection{Ion Colour}
 
 This filter allows for the association of a particular colour to an ion, based upon the value of the ion, and the desired colour scheme. By selecting a start and end value for the colour scheme, Points can be given a colour that interpolates between these two values. The ion's value (as, for example, visible in a spectrum histogram) is used to set the colour for that point.
 {%
@@ -1091,7 +1154,7 @@ Voxel & No & No & No\\
 
 
 \FloatBarrier
-\subsection{Ion Transform}
+\subsubsection{Ion Transform}
 
 This filter allows for the transformation of the XYZ or value of a given point, based upon the chosen filtering algorithm. The available algorithms for transformation of a point are as given:
 
@@ -1127,6 +1190,8 @@ Voxel & No & No & No\\
 \end{table}
 }%
 
+
+
 A drawable will only be emitted if the ``show marker'' option is selected.
 \section{Attributions}
 
@@ -1200,7 +1265,6 @@ The filter tree is shown, with a pos load filter as the top level element, which
 
 A simple example file is given below, and is nominally in the ASCII 1 byte per character format. The original specification, to the authors knowledge, predates the UTF-8 and extended codepage support for non English languages. Thus non-English languages are not part of the file format - each should use the ``C'' locale for reading and writing, to avoid localisation concerns.
 
-\begin{table}
 \begin{verbatim}
 1 2
 Aluminium
@@ -1209,7 +1273,7 @@ Al 1 1 1 Al
 . 10.0 150 1
 . 150 200.2 1
 \end{verbatim}
-\end{table}
+
 
 The first line consists of two unsigned integers, separated by a space. The first integer is the number of unique ion types, and the second is the number of ranges. The next lines are taken as pairs. The first entry in the pair is the name of the ``ion''. The next entry consists of four parts. The first entry is a space terminated string, and is the shorthand name for the element. The next three elements are floating point values in the range of $[0,1]$, and are the colour of the ions th [...]
 
@@ -1259,7 +1323,7 @@ Note that due to the need to do multiple passes over the text file to interpret
 \label{sec:externalProgExample}
 The ``external program'' filter can be used to transfer data on-the-fly between \emph{3Depict} and a separate program, allowing for an extension of the capabilities of \emph{3Depict}, without requiring direct modification of \emph{3Depict} itself. This is targeted at advanced users who wish to connect other programs to \emph{3Depict}, as part of their analysis toolchain. Here short, simple example programs are given in several languages. Specifically, we provide examples for  \emph{Scila [...]
 
-Each example will load an input file, generated from \emph{3Depict}, optinally alter the data, and then return the modified data back to \emph{3Depict}. The examples are for instructive purposes only, and do not reflect the optimal implementation of the specific task, in order to simplify the presented program. Not all features of the external program filter are presented in this Appendix. For the full documentation on the filter, see Section~\ref{sec:rangeFilter}.
+Each example will load an input file, generated from \emph{3Depict}, optionally alter the data, and then return the modified data back to \emph{3Depict}. The examples are for instructive purposes only, and do not reflect the optimal implementation of the specific task, in order to simplify the presented program. Not all features of the external program filter are presented in this Appendix. For the full documentation on the filter, see Section~\ref{sec:rangeFilter}.
 
 Files for the sample programs can be generated from the following inline examples, or alternately, can be downloaded form their respective URLs
 
@@ -1573,7 +1637,7 @@ exit 0
 
 The output from running the refresh cycle is given, as it appears on the program console (to replicate this mac/windows users may need to redirect the output to a file in order to see the output text (this can be done in bash), or mac users may launch \emph{3Depict} from terminal.app).
 
-Firstly, note that the \emph{same file} is written to each time - \emph{3Depict} does not delete the ``script-output-3Depict-input.pos``, so if this is named differently between refreshes, multiple pos files would be generated and \emph{3Depict} would load them all. Finally, the statement \texttt{exit 0} is used to ensure that \emph{3Depict} knows that the program terminated succesfully. Recall that returning a nonzero value will inform \emph{3Depict} that some error occured during proce [...]
+Firstly, note that the \emph{same file} is written to each time - \emph{3Depict} does not delete the ``script-output-3Depict-input.pos``, so if this is named differently between refreshes, multiple pos files would be generated and \emph{3Depict} would load them all. Finally, the statement \texttt{exit 0} is used to ensure that \emph{3Depict} knows that the program terminated successfully. Recall that returning a nonzero value will inform \emph{3Depict} that some error occurred during pro [...]
 
 \begin{verbatim}
 Working Directory: /home/username/3Depict/src
diff --git a/docs/manual-latex/manual.tex.backup b/docs/manual-latex/manual.tex.backup
deleted file mode 100644
index d2685bc..0000000
--- a/docs/manual-latex/manual.tex.backup
+++ /dev/null
@@ -1,1840 +0,0 @@
-\documentclass[10pt]{article}
-\usepackage{fullpage, graphicx, url}
-\usepackage{hyperref}
-\usepackage{placeins}
-\setlength{\parskip}{1ex}
-\setlength{\parindent}{0ex}
-\title{User Manual}
-\date{Version}
-\author{}
-
-\usepackage{wrapfig}
-
-
-\begin{document}
-\begin{titlepage}
-
-\begin{center}
-\vspace{3 cm}
-\Huge \textbf{3Depict}\\[1.0cm]
-
-\textsc{\Large Valued point cloud visualisation and analysis}\\
-\hrulefill \\[1.0cm]
-
-\begin{center}
- \includegraphics[width=\textwidth,keepaspectratio=true]{./figures/CoverImage.png}
- % CoverImage.png: 1308x957 pixel, 72dpi, 46.14x33.76 cm, bb=0 0 1308 957
-\end{center}
-\vspace{1.0 cm}
-
-
-{ \Huge \bfseries User manual}\\[0.4cm]
-\vspace{1.0 cm}
-
-
-\begin{minipage}{0.5\textwidth}
-\begin{flushleft} \large
-\emph{Website:}\\
-\url{http://threedepict.sourceforge.net/}\end{flushleft}
-\end{minipage}
-\begin{minipage}{0.3\textwidth}
-\begin{flushright} \large
-\emph{Version:} \\
- 0.0.14, Aug 2013\end{flushright}
-\end{minipage}
-
-\vfill
-
-\end{center}
-
-\end{titlepage}
-\clearpage
-\pagenumbering{roman}
-\tableofcontents
-\clearpage
-\pagenumbering{arabic}
-\title{3Depict -- Valued point cloud visualisation and analysis}
-
-\widowpenalty = 10000
-
-
-
-\section{Foreword}
-\subsection{Introduction}
-
-\emph{3Depict} is an open source computer program designed for the analysis of point clouds with an associated scalar value. The program is designed around interactive data analysis, with a view to combine rapid feedback, ease of use and flexibility in a single system.  At time of writing, \emph{3Depict} is in the so-called ``alpha'' prototyping stage, and should be used where helpful, but may contain rough-edges.
-
-\emph{3Depict} is designed purely for post-processing of 3D point data, and was originally primarily targeted to users of Atom Probe Tomography. Other users (\emph{e.g.} in astronomical, geospatial or digital preservation fields) may find the program useful, and are encouraged to seek assistance. 
- 
-\subsubsection{Background}
-
-\emph{3Depict} attempts to fill a perceived need for freely available flexible point data visualisation. This program is designed to manipulate and modify point data in a way which the author has otherwise not found a suitable program to do.  
- 
-With this program, point data can be visualised using a fully implemented camera system, edited with directly interactive objects, and subjected to various analysis algorithms. A real-time plotting system is also provided to generate analyses of your data on the fly. External programs can be engaged as part of the system to create new analyses that ``clip into'' the analysis. 
- 
-\subsubsection{What is Open Source?}
-\begin{wrapfigure}{r}{0.7\textwidth}
- \includegraphics[width=0.7 \textwidth,keepaspectratio=true]{./figures/compilation.pdf}
- % camera.pdf: 578x382 pixel, 72dpi, 20.39x13.48 cm, bb=0 0 578 382
- \caption{Closed-source programs only provide the final application, are neither human readable nor modifiable, and will only work on a specific platform. By contrast open source programs distribute the source-code as well as the application. The source code is the core logic which can be made to work on many platforms due to the invariance of the program logic.}
-\label{fig:compilation}
-\end{wrapfigure}
-Open source programs are programs which distribute not only the executable code, which is understood by the computer (so called machine code), but also provides the version of the program as it was written by the developers as well. This provides external users with the possibility of modification or verification of the program behaviour, either by themselves, or by engaging a third party. With the source code one can verify the correctness of the system, alter behaviour or otherwise mod [...]
-
-Modifications to the program itself may include migrating the program to newer or older systems, adding new functionality, or correcting errors in the program implementation.  
- 
-To provide the user with these capabilities, the program is distributed with a so-called \textit{libre} copyright licence. The program is distributed at no cost to the end user, and the copyright attached to the program explicitly allows modification and re-distribution (copying) of the program to other parties.
-
-Note that there are restrictions on what may be done with the program, for example it is in violation of the licence to claim ownership of the program, or to use technical measures to prevent access to the program, or modification thereof. The licence used in the program is a generic one shared by many free (as in freedom) software programs. 
-
-If you have been charged for this program, it is suggested that you request a refund and obtain a free copy from the main website, as listed on the front cover of this document. If you wish to have the full licence details (GNU General Public Licence Version 3 (or any later version)), please see the \texttt{COPYING} file distributed with this program. If this is not available, please see the project website, or perform an Internet search for the licence name.
- 
-\subsection{Requirements}
-Due to the design of the program, the program should run under Linux, Mac, BSD and Windows machines. The program does not rely on CPU specific features, and thus should be able to be run under x86, x86-64, arm, or whatever. Basically, it should run just about anywhere. Every effort is expended by the author to ensure that the program can be run on as many devices as possible; if your platform is not supported, it may be possible for either you, or the author to generate executables for y [...]
-
-The minimum requirements for running \emph{3Depict} are not known. The author wrote a substantial portion of the program on a machine with only 4 and 12~GB drives, and a 1.6~GHz processor, which normally runs at 800~MHz and has 1~GB of RAM. There is no clear reason that it would not run on even lower-spec machines. Whilst a higher spec machine may run the program faster, intelligent use of the programs ``filter'' system may allow for complex analyses even on low-end machines. 
-
-If you are experiencing 3D graphics problems, first ensure that other 3D programs do not experience the same problems. Otherwise, please contact the authors for assistance -- there should be no requirement for vendor-specific hardware. Note however that the exact appearance of the 3D view is dependent upon your hardware, and may have small changes between different platforms. 
-
-\subsection{Platform specific notes}
-Note that whilst every effort is made to ensure that the program will run on a variety of systems, small system-specific quirks may be evident, particularly on platforms to which the authors do not use regularly (\emph{e.g.}\ windows). Secondly, due to slight differences between platforms some functions may be remapped to other mouse/key combinations.  
-
-Mac:
-\begin{itemize}
- \item \texttt{Ctrl} keys may sometimes be mapped to the \texttt{Command} (clover) key.
-\end{itemize}
-
-Windows:
-\begin{itemize}
- \item \texttt{Ctrl+Tab} cannot be used as a key combination, as this is reserved for switching between user interface elements. \texttt{Ctrl+Alt} is used instead.
-\end{itemize}
-
- 
-\subsection{Getting help}
-
-Assistance with this program may be freely obtained over the Internet at \url{http://threedepict.sourceforge.net}. Questions regarding use of the program, feature or bug reports will be attended to as soon as possible. Contact options include email (via the online web-form), or an online forum.
-
-If the program crashes in a predictable manner (\emph{i.e.}\ you know how to trigger it), this is a bug and needs to be fixed. Please report the bug in this case, so we can fix it as quickly as possible. If the program crashes in an unpredictable fashion, please still report it as best you can, and we will try to fix it if we can isolate the problem from the description. For advanced users, we would appreciate backtraces, packages,  and any other relevant information in both of these cases.
-
-\subsection{Who wrote this program?}
-
-This program was written by D. Haley, in his spare time. A. Ceguerra provided  additional development from Version~0.0.2 and provided assistance with debugging and fixing the Macintosh version, and providing executable versions of the program for OSX in 0.0.1. 
-
-\subsection{Alternate documentation}
-For the more visually inclined, screencasts of the program have been created, and are available on the project website. These videos exhibit basic use of the program for various simple analyses. At time of writing, the only literature available for the program is this document, and the online screencasts. If you have questions, please contact us through the website, where we will reply as soon as possible. 
-
-\subsection{Helping out}
-
-\emph{3Depict} takes time to develop, and no doubt could be better than it is now. However, this doesn't all just magically happen -- people have to put the work in. Development time by the authors is split between testing the program, reproducing bugs, coming up with new ideas for program changes, editing documentation, making pretty pictures, maintaining websites, and even developing the program. 
-
-We would always appreciate assistance with this work. You don't have to be able to write computer programs. For example, we would like to translate the program into other languages. If you can translate a spreadsheet table into another language, this is helpful. If you can work out what triggers particular bugs, this is  helpful. If you can improve this document, this is also really helpful. Of course, if you can program (C/C++) and are willing to help, grab a copy of source from our web [...]
-
-\section{Basics}
-\subsection{Getting started}
-\subsubsection{Licence}
-\label{sec:licence} 
-This program is distributed under the GNU General Public Licence Version 3 (GPLV3+), an \textit{open-source} licence. Information on the copyright of this program is available under the \texttt{COPYING} file in the program directory, or online (\emph{e.g.}\ \url{http://www.gnu.org/licenses/gpl-3.0.txt}).
-
-The basic premise is that you may copy the program, modify and distribute such modified versions or derivative works only under the same licence. The licence forbids technical restrictions on users further redistributing the program.
- 
-\subsubsection{Installing the program}
-The installation method for the program depends upon your chosen operating system. The most up-to-date notes are available on the project website. It is highly recommended that, in general, you do not simply download random programs from the Internet and execute them if a version is available in a trusted software repository. 
-
-\subsection{Understanding the interface}
-The program interface consists of three different views. On the left, there is the data, cameras and tools panes, with are used to generate data for visualisation, and to provide an interface into changing properties in a structured manner. On the right, the view is split into two sections; at the top, there is the 3D view. At the bottom are the plotting, raw data and console output panels.  
-
-\begin{figure}[ht]
-  \centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/interface.png}
- % camera.pdf: 578x382 pixel, 72dpi, 20.39x13.48 cm, bb=0 0 578 382
-
- \caption{Interface layout. The 3D view, plot panel and filter tree are labelled.}
-\label{fig:interfaceLayout}
-\end{figure}
-
-
-Each pane may be hidden, either by double clicking the ``sash'' between the two panes, by selecting the respective item from the view menu or by its keyboard shortcut key as listed in the menu.  
-
-At the very bottom of the program, a status bar is shown -- here messages are shown to provide hints on how to use the program, or to communicate information relating to the program's internal state. 
-
-
-\FloatBarrier
-\subsubsection{The 3D View}
-
-The 3D view is used to show the three-dimensional objects generated during a data analysis, and provides a direct method of interaction with the 3D Scene. Through the use of the mouse (or other pointing device), the 3D view can be manipulated to change the view position and orientations. Some objects in the 3D view are interactive, and will be indicated by an overlay in the top right of the window when the pointer is on top of such an object. 
-
-
-
-\paragraph{Basic movement}
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.7 \textwidth,keepaspectratio=true]{./figures/camera.pdf}
- % camera.pdf: 578x382 pixel, 72dpi, 20.39x13.48 cm, bb=0 0 578 382
-
- \caption{Basic camera layout. Each camera has a position, an up direction and a target. The 3D view is as seen by the camera. Cameras may be saved and recalled to return to specific views. Try to realise it is not the object that moves, but rather yourself.}
-\label{fig:camera-basics}
-\end{figure}
-The 3D view represents your camera into a 3D scene of your construction; it is by manipulation of cameras that the view is interacted with; so you may zoom, orbit, pan, roll or swivel the camera view. If you are lost at any time, you may reset the view by tapping the space bar. To change the axis along which the view is reset, hold the \texttt{Ctrl} or \texttt{Shift} buttons whilst resetting.  Double tapping the space bar will cause the axis to be viewed from the reverse direction.
-
-The basic 3D view consists of a ``target'' based camera, so when you move the camera, the camera will orbit around this target. To interact with a scene, hold down the left mouse button and move the mouse to control the camera.  
-
-
-The basic keys for controlling the camera move mode (left click) are\footnote{As stated previously, mac systems do not use the Ctrl key.}:  
-\begin{itemize}
-\item  \textbf{No key}: Orbit camera 
-\item \textbf{Ctrl}: Pan camera 
-\item  \textbf{Tab}: Swivel camera (Look about)
-\item  \textbf{Ctrl +Tab} (Windows \textbf{Ctrl+Alt}): Roll camera around viewport centre. Note that the rolling motion is controlled by the position of the mouse click.
-\item \textbf{Space/Shift+Space/Ctrl+Space}: Reset camera bounds and position to look along X,Y or Z axes respectively.
-\item \textbf{+/-}: Zoom in/out.
-
-\end{itemize}
-For any motion, the \texttt{Shift} key may be used to increase the camera move speed.  Scrolling on the window zooms in or out. For a perspective camera, zooming is performed by moving the camera closer to the object. For an orthographic camera, zooming simply scales the view, whilst holding the camera position constant.
-
-
-\subsubsection{Plot area}
-The available plots are listed on the right hand side of the plot view panel. You can select the active plot from the list. The items in the list take their name from the filter from which they originates name (there are exceptions to this rule, \emph{i.e.}\ composition profiles). Several plots may be drawn at once by holding down the \texttt{Ctrl} key when selecting the plot to draw from the plot list box.  
-
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/spectrum-raw.png}
- % camera.pdf: 578x382 pixel, 72dpi, 20.39x13.48 cm, bb=0 0 578 382
-
- \caption{Raw data pane, with associated spectrum displayed. Data can be selected, and saved for external manipulation as desired.}
-\label{fig:raw-basics}
-\end{figure}
-
-
-Raw data is visible in the ``raw'' tab (Figure~\ref{fig:raw-basics}), and will show the output data from the selected plots, with the axis labels for each plot. The data can be saved to a file from this view.
-
-
-
-\subsubsection{Console}
-Each filter may optionally generate console output. In the case, a text area will contain messages from the filter to the user. An example of the messaging area, and the messages are displayed in Figure~\ref{fig:console-basics}. As can be seen in this figure, if a message has been generated from a filter, but is not the messaging area is not active, the console tab will display a small marker to denote new messages pending for review. The exact marker that is shown is dependant upon the  [...]
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/console.png}
- % camera.pdf: 578x382 pixel, 72dpi, 20.39x13.48 cm, bb=0 0 578 382
-
- \caption{Console tab, with sample console messages. The inset shows how the tab will appear if messages are pending whilst the console itself is hidden.}
-\label{fig:console-basics}
-\end{figure}
-
-
-\subsubsection{Tools panel}
-The tools panel offers several options on changes to the way the program operates internally. 
-
-\begin{itemize}
-\item  \textbf{Smooth and Translucent objects}: This enables so-called ``alpha blending'' in the 3D scene, where appropriate which allows for non-opaque objects, and anti-aliased objects. This mode alters the way in which objects are rendered in the 3D scene and is in effect a quality-appearance tradeoff. Most of the time you will probably want it set to ON. The program may render the 3D scene slightly faster if this is disabled.
- 
-\item  \textbf{Enable lighting}: 3D objects do not look very 3D if you are only seeing them on a 2D screen. Computer graphics works around this by simulating the effect of having a 3D lighting source. This might provide minor performance improvements if disabled, at the cost of clarity of rendering.
- 
-\item \textbf{Enable filter caching}: This alters the way in which the program processes the filter tree. Normally, the program performs what is known as a depth-first search, and propagates data generated by the program from one filter to the other. Intermediate copies are kept by the filters themselves to speed up recomputation. However, this strategy has a large downside, which is memory consumption. Disabling this will reduce memory consumption by filters, but will mean that any chan [...]
-
-\item \textbf{Weak and fast random}: This setting is a program wide setting that switches the strength of the random number generator. However, for more robust statistical results, it is recommended that this be disabled when computing final values. When enabled, the program will use a Linear Shift Feedback Register using a maximal length Galois polynomial to generate numbers required for random sampling. This has the advantageous property of being a somewhat random entirely non-repeatin [...]
-\end{itemize}
-
-
-\subsection{Usage fundamentals}
-Initially the program window will appear with only the default world axes visible. To provide a more interesting view, it is necessary to inject data into the program.  To do so, select the File menu, and then select using ``Open''. At time of writing, only two formats are currently supported. Firstly are ``POS'' files, and secondly are text files, each which consist of X,Y,Z and a values (usually mass-to-charge)\footnote{For a technical description of the POS file format see Section~\re [...]
-
-Upon selecting the file and then \texttt{Open}/\texttt{OK}, the file will be loaded into the viewport. Note that the entire file is not loaded, but rather a random selection of elements in the file. 
-
-Loading this file populates a small treeview on the data pane (at the left). This tree is referred to as the ``analysis'' tree, and each item in the tree is called a ``filter''. The tree is responsible for producing the output data in the scene, and a good understanding of the behaviour of this tree is required to extract the maximum benefit from the program. Each item in the tree has a list of properties that can be modified. For example, the amount of data loaded by the ``pos load'' fi [...]
-
-Thus, each filter can be individually altered to change its behaviour. However, each filter acts upon the output of the filter that is a ``parent'' to it (in the case of not having a previous filter, each filter will act as if it had no incoming data). Thus the arrangement of each filter in the tree is critical to the output of the program. In order to modify the  layout of tree, you may add new and move, copy or remove existing components of the tree.  Changes to the tree, or any filter [...]
-
-Note that with every modification of the tree, the 3D scene and any plots will be recomputed. The time of computation is dependent upon the amount of data that is to be analysed, and can be reduced through sampling or volume restriction methods. By default, each filter may cache its own output, in order to speed repeated computations.
-
-To delete an item, simply select the item to delete with the mouse, and then use either the \texttt{Delete}  or  \texttt{Backspace} keys on your keyboard. Note that clicking on an already selected item will activate the name edit mode. To exit this mode, press \texttt{Escape}. 
-
-New items can be added to the tree by selecting the filter to add from the dropdown box immediately above the tree. When selecting a new filter to add; an element in the tree must be selected, where the new filter will be placed. If there is no item selected, an error will be shown in the status bar.  
-
-Once an item is added, the filter tree is thus modified and a recomputation of the scene will occur. Approximate progress on the filter update is visible in the status bar. During an update, only limited interaction with the program is permitted. An update may be cancelled at any time with the \texttt{escape} key. 
-
-
-\section{Quick start}
-Several quick notes are provided here as examples of how to perform specific measurements/calcuations. Whilst this is not an exhaustive list of measurements that can be made in \emph{3Depict}, this section is targeted towards new users who wish to use the program to perform quick or common measurments.
-
-\subsection{Loading data}
-\label{sec:quickStartLoadData}
-To load data, one must first have data to load in the form of either a "POS" formatted file (see Section~\ref{sec:posformat}), or as a text file (using english notation, four columns - see Section~\ref{sec:textformat}). To load the data, use the Open command in the File menu. Alternatively, one can drag and drop the file onto the program.
-
-\subsection{Loading an analysis}
-You may have an existing analysis file, which you can use to load both the data, and any associated analysis information (plots, clustering, clipping, etc.), which for example may have been undertaken by a separate user. 
-
-To load it, you require a ``package'' from the previous user, which will be a folder containing a XML file, and any data files that are required. As for loading data, you can either directly open the analysis with File$\rightarrow$Open, or by dropping it onto the program. 
-
-Note that by default, the program will not load all the data in the file - a sampling will be performed. Careful use of data sampling will allow for a much more rapid and interactive analysis of large datasets - many of the algorithms running times do not scale directly with the size of the dataset. Reducing the number of ions can, in some cases, result in a signfificant reduction in run time (eg halving number of ions for some algoritms can result in a run time of a quarter required for [...]
-
-\subsection{Ranging}
-\label{sec:quickStartRangedData}
-The program can be used to mark particular sections of the spectrum as belonging to a particular ``range'' of values. Each value can be tagged with a specific name for the range, and an associated colour, which will be used to mark the points in the 3D display.
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/rangeDropdown.png}
-
- \caption{Opening a range file can be done from either the filter drop down, or by dropping a rangefile onto the program. You must first have data loaded (as shown by the red points).}
-\label{fig:rangeDropdown}
-\end{figure}
-
-
-To perform ranging, you must first have a valid rangefile. As of time of writing, (July, 2013 - 0.0.14), the program is unable to generate these. It is possible to write the file by hand, or using a separate program - details on manually writing the file can be found in Section~\ref{sec:rangeFormat}.
-
-To perform ranging, the data must be first loaded into the program. The range information can be loaded in two ways, by dropping a valid rangefile onto the program, or by using the filter dropdown (Figure~\ref{fig:rangeDropdown}), whereby a window will open that will allow for the selection of a valid range file. 
-
-Once loaded, you can select the ranging filter and enable/disable ions and ranges you do not wish to see. By default unranged ions are not emitted from a range filter, so will not be seen unless ``Drop Unranged'' is unselected.
-
-
-\subsection{Spectrum}
-To see the mass spectrum for a selected data, the ``spectrum'' filter must be used. First load the required data (as per Section~\ref{sec:quickStartLoadData}), then select the data filter in the tree, and select ``Spectrum'' from the filter drop-down. This will display the spectrum without any overlaid ranges. To get the desired signal/noise level, you may wish to either alter the sampling level in the Pos Data (Load Limit value), or disable sampling. Changing the spectrum bin width unti [...]
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/rangedSpectrum.png}
-
- \caption{Ranged spectrum shown only the data that is within the selected ranging windows. The ``Drop unranged'' option can be used to show all the data, and thus the complete spectrum.}
-\label{fig:rangedSpectrum}
-\end{figure}
-
-
-To display the ranged spectrum, simply use the sequence \texttt{Data$rightarrow$Ranging$rightarrow$Spectrum}, as shown in Figure~\ref{fig:rangedSpectrum}. To see the ions outside existing ranges, untick ``drop unranged`` from the range filter. Note that as the data is converted into a spectrum, the 3D view will disappear. To see both the spectrum and the point data at the same time, use the configuration shown in Figure~\ref{fig:rangedSpectrumWithCloud}.
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/rangedSpectrumCloud.png}
-
- \caption{This layout can be used to simultaneously display both the point cloud and the ranged spectrum.}
-\label{fig:rangedSpectrumWithCloud}
-\end{figure}
-
-
-\subsection{Composition profiles}
-To display a composition profile, you first require a ranged dataset (see Section~\ref{sec:quickStartRangedData}). Once done, first select the range filter, then choose a concentration profile from the drop down. Note that as the data has now been converted into a concentration profile, the point cloud will disappear (although the concentration profile cylinder is visible, and is computing the correct result). To see both the data and the concentration profile at the same time, use the c [...]
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/quickStartConcLayout.png}
-
- \caption{This layout can be used to show both point data and a concentration profile simultaneously.}
-\label{fig:quickStartConcLayout}
-\end{figure}
-
-
-
-\subsection{Counting Points and measuring volume}
-
-To compute the absolute counts of the number of ions that are visible in the dataset, use the ``Ion information'' filter, as shown in Figure~\ref{fig:quickStartIonInfoLayout}. To compute the ion count, check the ``count'' box. To compute the dataset volume, select the ''volume'' checkbox, and the desired algorithm (For algorithm details see Section~\ref{sec:FilterIonInformation}). The results are displayed in the console window (Figure~\ref{fig:quickStartIonInfoLayout}).
-
-\begin{figure}[ht]
-\centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/quickStartIonInfoLayout.png}
-
- \caption{Ion count and volume data can be displayed from the ion information filter. The output is displayed in the console window.}
-\label{fig:quickStartIonInfoLayout}
-\end{figure}
-
-
-
-\subsection{Concentration surface and slices}
-
-To generate iso-concentration surfaces, or to create 2D slices in your data for visualising information such as concentration fields, a voxelisation must first be conducted.
-
-Load some ranged data (Section~\ref{sec:quickStartRangedData}), and then select the range filter and choose ``Voxelisation''. This will cause the dataset to disappear until you configure the voxelisation parameters appropriately. To compute a concentration field, change the normalisation mode to ``All ions (Conc)'', then select the ions that are to be included.  To visualise the result, change the ``representation'' mode to either isosurface or 2D slice. The upper and lower bounds of the [...]
-
-However, for the isosurface one must choose the value that the isosurface is spanning. For non-concentration modes, after computation of the voxel field, the upper and lower bounds of the field are shown in the console window, and can aid in selecting the desired isosurface value.
-
-
-\section{Understanding the program}
-\subsection{Filters}
-
-Filters form the key component of the program. These are the tools by which data is analysed and modified, in order to generate the visual representation that is needed by the end users. The basic idea behind a filter is that each filter may perform arbitrary operations on ``data streams''. These data streams are sent to and from each filter, flowing through the tree.
-
-\begin{figure}[htp]
- \centering
- \includegraphics[keepaspectratio=true,width=0.85 \textwidth]{./figures/generic-filter.png}
- % generic-filter.png: 10x603 pixel, 17dpi, 153.75x90.54 cm, bb=0 0 4358 2567
- \caption{Basic concept of a filter. Data goes in, data comes out. The filter may perform any operation on the data coming in or out as it chooses. The data streams coming in are restricted to certain types of data, as shown. }
-\label{fig:basic-filter}
-\end{figure}
-
-
-The basic idea of a filter is illustrated in Figure~\ref{fig:basic-filter}. \emph{3Depict}'s flexibility is that these filters can be arranged in any way that makes sense to the end user. There is no restriction on placement of filters -- some placements may be totally useless, others may be exceedingly useful. It is up to the creativity of the end user to determine whether any single arrangements meets their needs.
-
-\subsection{Trees}
-\label{sec:treebehaviour}
-The tree is a flexible and powerful system for constructing your own analyses, after some use this will become a familiar and readily modifiable system for performing your analyses, however the initial structure of the program may take some getting used to. If you are familiar with programs such as \emph{Paraview}, you may already be familiar with this concept.  
-
-The filter tree essentially is a system for injection, manipulation and display of the data in the program. The tree becomes an ``assembly line'' for the view of data in the 3D and plot views.  The nodes of the tree are the filters that act on or insert data into the analysis. Each node in the tree may be considered in what is called a ``parent-child'' relationship. Each element in the tree (except the first) has a ``parent'', and thus may have their own ``child'' elements. Each ``parent [...]
-
-The basic method for data flow is that a parent gives a copy of the data it has processed to its ``children'' to modify in some way. Each ``child'' has its own copy\footnote{Technical note: the ``copy'' system is at the discretion of each filter. Child filters are given a reference to the parent data which restricts modification of the parent's data by the children; children may or may not duplicate this data, propagate or terminate the reference.} of the data from the parent, which it m [...]
-
-\begin{figure}[ht]
- \centering
- \includegraphics[width=0.85 \textwidth]{./figures/tree-propagate.pdf}
- % tree-propagate.pdf: 1513x798 pixel, 72dpi, 53.38x28.15 cm, bb=0 0 1513 798
- \caption{Data propagation in a tree for a particular arrangement of filters. Data is propagated from a parent filter to its children.}
-\label{fig:datapropagate}
-\end{figure}
-
-
-Using this method, one may create a variety of different analyses; for example, one may wish to subsample data before performing a time-consuming spatial analysis, or one may wish to clip the data to remove unwanted sections before generation of a value spectrum. The flexibility of the filter system supports this concept.
-
-Note that items in the filter tree can be moved. You may move any filter to a new parent by dragging with the mouse. In order to copy instead of move, hold down the \texttt{Ctrl} whilst moving to duplicate the filter, rather than moving it.  
-
-You may also rename filters in the tree; The filter name may be used by the filter to generate its output, \emph{e.g.}\ spectrum plots will take the plot title from the filter name. 
-
-
-
-\subsection{Stashes}
-
-Instead of enabling or disabling sections of the tree, the program supports ``stashes'' as a place to put sections of the analysis tree for later use without using them in the analysis section. To create a ``stash'', select a section of the filter tree to ``stash'', then in the ``stashed filters'' dropdown on the data tab, type the name of the stash you wish to create (this is up to you), and press \texttt{Enter}. Once done, a duplicate of the subtree specified (\emph{i.e.}\ all the filt [...]
-
-
-\begin{figure}[ht]
-  \centering
- \includegraphics[width=0.85 \textwidth,keepaspectratio=true]{./figures/Stash-operation.png}
- % Stash-operation.png: 1065x606 pixel, 72dpi, 37.57x21.38 cm, bb=0 0 1065 606 
- \caption{Creating a stash from the filter tree. New stashes will appear in the dropdown and can be selected to recall subtrees to insert into the filter tree.}
-\label{fig:stash-creation}
-
-\end{figure}
-
-To use a stash, select a filter in the tree and then click the dropdown button on the stash combo box, and then select the stash you wish to use. This will place the stash as a child of the selected filter. Note that the stash can be used multiple times.  
-
-\subsection{Plots}
-Any plots generated by the filter system are displayed in the plot pane. It is possible to zoom or pan the view as required by dragging or \texttt{shift} dragging the plot respectively. Double-clicking the plot returns the plot back to its original scaling.
-
-The associated numbers used to generate the selected plots are shown in the ``Raw'' tab. Note that plots can contain ``regions'', such as generated by a range file. In this case, each region may be manipulated in-situ, by dragging the regions sides, or its centre to alter or move the region respectively. These modifications will be propagated back to the original filter.
-
-Each plot is either logarithmic, or linear in scaling. Mixing these two types of plot will result in the y-axis stating that there are mixed data types in the plot. The log/linear mode is determined by the filter that generates the plot. Note that due to internal limitations (fixed plot palette in the underlying library), the colours observed in the plot may be slightly different from those specified by the filter.
-
-\subsection{Cameras}
-To fully understand the camera model, it is necessary to understand the parameters in the camera property tab. Initially there is only the default camera, which is unnamed. By entering in a name for the camera, you can access the properties for that particular camera. By entering in more names, you can create multiple cameras, saving the position of existing cameras as you go. This can allow you to jump between different camera views as desired.
-
-One can select the position of the camera, a position that the camera is always looking at (target), the camera ``up'' direction, and the field of view. Furthermore, the camera type (perspective or orthogonal) can also be selected.
-
-With the exception of the field of view, these parameters are dynamically modified when interacting with the 3D scene (see section X). The camera field of view, however requires special mention. The field of view of the camera is the angle that the camera look at. Human vision is around 120*, and is much narrower for suffers of tunnel vision (say, 30*). A bird has a full 360 degree field of view (it can see in all directions without needing to turn its head). By default the camera is set [...]
-
-\subsection{Effects}
-The effects tab allows for altering the appearance of the 3D output data, without changing the data itself. Current effects are anaglyphic 3D (colour-based 3D glasses), and visual clipping.  
-
-\subsection{Program actions}
-
-\subsubsection{Save}
-The current programs state can be saved to an ``XML'' state file for later analysis\footnote{See Section~\ref{sec:xmlstatefile} for more information.}. Note that opening an existing program state file will erase your current state. If you wish to merge the two states together into a single analysis, use the ``merge'' option. Note that as this file references, but does not contain, the data files needed for the analysis, this file cannot be moved between computers and expected to ``just w [...]
-
-\subsubsection{Undo}
-The program has an undo feature which can be used to abort the last changes to the filter tree. Note that for memory reasons, the results of the computation are not stored, and will need to be recomputed. Note that there is also a ``redo'' function, which allows for undone changes to be restored. 
-
-\subsubsection{Raw Data}
-The raw data pane may be used to obtain the raw XY data used to generate the plots. This can either by copied and pasted, or alternately saved to file.  
-
-\subsubsection{Export Menu}
-Plots, images, ion data and animations may be exported from the program. The output format for 3D images is the ``Portable Network Graphic (PNG)'' format; these are supported by almost all image viewers. 
-
-For plots, you may save in either (Scalable Vector Graphic (SVG)) or ``PNG'' forms. Note that due to the nature of the SVG files, no resolution is needed, and the image can be reproduced at any scale. Furthermore the SVG can be used later to generate PNG images at the required size for output (We recommend the program \textit{Inkscape}). Alternately saving as PNG can be done, and you will be prompted for the desired image size.
-
-Exporting Ion data can be done in several ways; you may export only the visible ions, or alternately, you may export only a subset (for example one or two ranges) of the data, depending upon the filter that the data emerged from (\emph{i.e.}\ per leaf filter). The output format will be in Big-endian ``POS'' format, as  detailed in the Appendix, Section~\ref{sec:posformat}.
-
-Modified range files may be exported in whole. Currently the only supported export format is the oak-ridge``RNG'' format
-
-Using simple animations of the 3D data can be constructed, where the current camera is orbited 360 degrees around its target location. The result is saved as an image sequence, which can be converted into an AVI using programs such as \emph{ImageJ}, or \emph{ffmpeg} to convert the constructed image sequence into a video file.
-
-More complex, filter based animations are covered in more detail in~\ref{sec:animationExport}
-
-Finally one can export the entire analysis state, including all required data using the export analysis package option. This will create  a folder which contains all the files needed to reproduce the current program state elsewhere. Note that this imports all referenced data files, so the package can become quite large, but should be fully portable to any other system by simply copying the created folder. Inside the folder, the program state will be stored as a state file, and can be acc [...]
-
-\subsubsection{Autosave}
-The program will generate an autosave file periodically. If the program crashes, it will look for an autosave file and prompt you to restore it. Note that only the program settings are saved, not the intermediate data, so recomputation will be necessary. If the autosave fails to load, then the autosave file will be archived in your 3depict configuration folder; in this case, please consider sending the failed file to the developers. For configuration locations, see the paths Section~\ref [...]
-
-
-\subsubsection{Export Animation}
-\label{sec:animationExport}As of \emph{3Depict} 0.0.12, it is now possible to automate the modify filter-refresh cycle. Specifically this allows for the animation of any property in any filter in the current filter tree. For example, if one wished to create an animation of a slice through of a POS file, one could create a clip filter, then interpolate the 3D point property to move the clip object automatically between animation frames. Note that the output of animation is not restricted  [...]
-
-
-In the Figure~\ref{fig:animateFilterView} the main window for animation can be seen, here it is possible to select the filters and properties that are to be animated. Depending upon the type of property selected (\emph{e.g.} number, colour, string, multiple choice), the selection dialog shown will be different.  To select the property that is to be animated, first one must select the filter, similar to how this is done in the main window. Once this is done, the properties currently set f [...]
-
-\begin{figure}
-\begin{center}
- \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/exportanimDialogFilterView.png}
- \caption{Overview of animation dialog with ``filter view'' active; left hand area of the window shows standard tree view, right hand window shows properties that are to be animated.}
-\label{fig:animateFilterView}
-\end{center}
-\end{figure}
-
-
-
-\begin{figure}
-\begin{center}
- \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/exportanimParamDialog.png}
- \caption{Numerical input window for setting parameters for animation}
-\label{fig:animateParamDialog}
-\end{center}
-\end{figure}
-
-By setting the start and end frame of the property, as well as the values desired at the start and the end, then the property of the filter will be changed during the animation. Any properties not listed in the grid will remain at their current values. Conflicting values are not allowed, for example, specifying the same property to have two different values at the same time. Such errors will be displayed in the filter view, as seen in Figure~\ref{fig:animateParamConflict}. 
-
-\begin{figure}
-\begin{center}
- \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/exportanimDialogConflict.png}
- \caption{Conflicting filter properties shown, highlighted to show the conflicting values in the animation property grid.}
-\label{fig:animateParamConflict}
-\centering
-\end{center}
-\end{figure}
-
-The properties selected for a filter will be linearly interpolated from start to finish, so, for example, setting a property at frame 1 to ``1'', and frame 10 to ``10'', each frame between will change as 1,2,3...,9,10. This can be done for multiple properties at any one time. Similarly for colours, the interpolation will be done linearly on the colour's red/green/blue value, so, similarly, colours can also be animated. Whilst linear interpolation can be done for colours, points and digit [...]
-
-
-\begin{figure}
- \begin{center}
- \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/exportanimDialogPropString.png}
- \caption{Setting string properties using the string input dialog, via manual entry.}
-\label{fig:animatePropString}
-\centering
-\end{center}
-\end{figure}
-
-
-
-
-In this case either each string must be individually specified, as shown in the figure, or alternately, one must supply a text file, with one line per string to be used as input --- this can be selected via the ``open'' button.
-
-\begin{figure}
-\begin{center}
- \includegraphics[width=0.9 \textwidth,keepaspectratio=true]{./figures/exportanimDialogFrameView.png}
- \caption{Overview of animation dialog with ``frame view'' active; right hand region of the window shows the values of the animation for each frame, on the left hand side are the outputs that the user wishes to obtain.}
-\label{fig:animateFrameView}
-\end{center}
-\end{figure}
-
-Once the desired properties have been set in the filter view, then one proceeds to the frame view in order to review the animation by examining the properties that will be obtained in each filter, frame-by-frame. If you are familiar with this dialog, then it is easy to simply examine this quickly to ensure that the properties that were intended have been obtained. Now, having ensured that this is the case, it can be seen that the "OK" button cannot be pressed at this time. Firstly, the d [...]
-,
- 1.0,1.1... , when the sampling value exceeds 1~MB, there is no effect on the computation, thus the program will not save data on frames that do not alter the output.
-
-\section{Detailed Reference}
-\subsection{Data types}
-Different data can propagate through the filtering system before it is seen in the 3D view. The currently available types are ions, plots, range, voxels and drawable object types. Although these are used internally by the program, understanding the type system may enable more advanced use of the program. If you are not interested in this, skip to the next section.  
-
-\subsubsection{Ions}
-Each ion represents a point in space, which has a value type associated with the point. For example, one might consider a point in a dataset where positions represent atomic positions, and the value is the measured atomic mass. Ions are grouped together by different filters, and each group may be represented with a unique colour and size.  
-
-\subsubsection{Plots}
-Plots can be passed between filters to allow for a 2D graphical representation of whatever it is that the filter computes. Plots are a X-Y paired set of scalar values, which are finally given a visual representation as a plot. Plots have a title, and a label, and may represented either on a linear scale, or a logarithmic one.
-
-\subsubsection{Range}
-This is a special datatype which propagates information through the filter tree. The data represents non-overlapping regions of the value space which are to be tagged as belonging to a certain group. This data type has no actual output into the 3D scene, but can alter the manner in which ``downstream'' filters process incoming information. For example, if a profile filter is used after a range, it will split up its measurements into a per-tag ``range'' section. 
-
-\subsubsection{Voxels}
-Voxels is shorthand for ``volume pixel'' and is a rectilinear region of space, divided up into an equally spaced rectangular grid. Voxels can currently be represented by a point cloud, where each point has a given colour and transparency, or by a triangulated surface (an iso-surface) which represents the contouring surface for a given scalar value.
-
-\subsubsection{Drawables}
-3D primitives can be injected into the data stream to assist in the final representation of the scene. Items such as spheres, lines triangles or text can be placed in the final scene.
- 
-
-\subsection{Filters}
-
-In this section, the detailed behaviour of the various filters available in \emph{3Depict} is outlined. Recall that each filter interacts with other filters and the visualisation environment by generation and propagation of various filter types. At the most abstract level, there are three ways that filters can interact with the data -- the list given below provides a may (optional) or will (guaranteed) output.
-
-\begin{itemize}
- \item \textbf{Emit:} Emitting a new data stream into the filter output (Yes: filter may emit, No: filter will not emit).
- \item \textbf{Use:} Using a new data stream for internal calculations (Yes: filter may use, No: filter will not use). 
- \item \textbf{Block:} Preventing an incoming stream from propagating to the output (Yes: filter will block, No: filter will not block).
-\end{itemize} 
-
-This section describes each filter in turn, the fundamentals of the internal computation, and provides a table describing which datastreams are emitted, used or blocked during the filter's refresh cycle.
-
-\label{sec:filter} 
-\subsubsection{Data load}
- 
-The data load filter injects 3D point+value data into the analysis tree. Points are loaded from a file by one of several different methods. By default, random data is selected from the file. This filter can be created using the ``load'' function from the file menu. Note that the default settings will only load a random subset of the data in order to speed analysis. If you require all data to be loaded, then you will need to alter the filter settings. 
-\begin{itemize}
-\item  \textbf{Number of columns}: Number of floating point values in a single record. Defaults to 4.
-\item  \textbf{X}: Position in record to use as X value. Defaults to 0.
-\item  \textbf{Y}: Position in record to use as Y value. Defaults to 1.
-\item  \textbf{Z}: Position in record to use as Z value. Defaults to 2.
-\item  \textbf{Value}: Position in record to use as associated scalar value. Defaults to 3.
-\item \textbf{Enabled}: Disable/enable the filter.
-
-
-\item \textbf{Monitor}: Monitors the timestamp of the input file for changes -- if the timestamp on the file changes, then the data file will be reloaded, and the filter tree refreshed. This is useful when generating data files programatically.
-\item  \textbf{Ion colour}: Colour of the ions from the 3D view.
-\item  \textbf{Ion size}: Default size of points in 3D view.
-\item  \textbf{Filename}: name of the file to load the data form.
-\item  \textbf{Load limit}: The maximum quantity of data to load from the file. If set to 0, then the entire file is loaded. Otherwise a random sub-selection of the file is loaded. Note that random selection reduces memory cost, but if it is more than a few percent of the file size, may be slower to load. 
-
-\end{itemize}
-
-Information on acceptable data file formats is provided in the Appendix, in Sections~\ref{sec:posformat} and~\ref{sec:textformat}.
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!Htb]
-\caption{Propagation matrix for Data load.}
-
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & No & No\\
-Plot & No & No & No\\
-Drawable & No & No & No\\
-Range & No & No & No\\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-\pagebreak
-\FloatBarrier
-\subsubsection{Downsampling}
-
-Randomly samples ions from the input stream. Can operate either to generate a fixed number at the output, or to take a fixed percentage of the input. If range information is provided, this can be done on a per-species level.
-
-\begin{itemize}
-\item  \textbf{Fraction}: Approximate random fraction of the data to load. Must be between [0,1].
-\item  \textbf{Max count}: The approximate number of ions to load.
-\item  \textbf{By count}: Specifies whether to use a fixed count, or a fixed fraction
-
-\end{itemize}
-
-{%
-
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Downsampling.}
-
-\begin{center}
-\begin{tabular}{llll}
-
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & No & Yes\\
-Plot & No & No & No\\
-Drawable & No & No & No\\
-Range & No & If available & No\\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-\FloatBarrier
-\subsubsection{Ion Information}
-\label{sec:FilterIonInformation}
-This filter allows for the computation of ion counts in any input streams, as well as volume estimation. If a range stream is present in its input, (\emph{i.e.}\ a Ranging is a parent of this filter) then the filter will perform per-species computation of the value.
-
-\begin{itemize}
- \item \textbf{Compositions}: Enable computation of the number of numbers of different ions (if ranged), or total ions in the input streams.
- \item \textbf{Normalise}: Normalise the composition values. This only has an effect if there is a range input stream.
- \item \textbf{Volume}: Enable estimation of the volume of space occupied by the ion streams. There are several algorithms for doing this:
-    \begin{itemize}
-	\item \textbf{Rectilinear volume}: Computes the volume of the minimal axis aligned rectangular prism, or bounding box, that can hold all the points in the input stream. Except for truly spherical datasets, the reported value will be a function of the data orientation.
-	\item \textbf{Convex hull}: Computes the volume of the minimal convex enclosing polygonal object, known as the convex hull. This is parameter free, but may cause gaps in the data to be estimated as part of the volume.
-    \end{itemize}
-    
-\end{itemize}
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Ion Information.}
-
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & No & Yes & Yes\\
-Plot & No & No & Yes\\
-Drawable & No & No & Yes\\
-Range & No & Yes & Yes\\
-Voxel & No & No & Yes \\
-\hline 
-\end{tabular}
-\end{center}
-
-\end{table}
-}%
-\FloatBarrier
-\subsubsection{Ranging}
-\label{sec:rangeFilter}
-
-This allows for the cropping and segregation of ions in 3D space by their scalar values.
-
-Each range loaded from the file may be enabled, either at the ion level (groups of ranges) or at the range level. The range values may be altered; however these may not overlap at any time. Note that these can be edited graphically (to some extent) if used in a mass spectrum. At time of writing, \emph{3Depict} cannot be used to generate range files, only write them.
-
-\begin{itemize}
-\item \textbf{Filename}: This is the name of the file to use as the range source. So-called ORNL ``rng'' files, Cameca ``env'' files and Imago/Cameca ``RRNG'' files are accepted. For information on the accepted file formats, see the Appendix, Section~\ref{sec:rangeFormat}.
-\item \textbf{Drop unranged}: This causes any ions not ranged to be silently dropped from the filter output. This is best enabled for 3D viewing, and best disabled for spectrum plotting
-\end{itemize}
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}
-\caption{Propagation matrix for Ranging.}
-
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & Yes & Yes\\
-Plot & No & No & No\\
-Drawable & No & No & No\\
-Range & No & No & Yes\\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-\FloatBarrier
-
-\subsubsection{Bounding Box}
-The bounding box creates a 3D box surrounding any point data in the input stream. The box uses relative coordinates, and has a specifiable font size, colour and line thickness. Several styles of bounding box may be chosen from a predefined list.
-
-{%
-\begin{table}[!h]
-\caption{Propagation matrix for Bounding Box.}
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & No & Maybe & No\\
-Plot & No & No & No\\
-Drawable & Maybe & No & No \\
-Range & No & No & No\\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-Note that if the bounding box option ``visibility'' is set to false, then no drawable item (\emph{i.e.}\ the bounding box) will be emitted.
-
-\FloatBarrier
-
-\subsubsection{Clipping}
-This filter allows for the rejection of data that does not lie within some given boundary. Possible boundaries are plane, sphere and cylinder. For example, if the sphere mode is set, ions within the sphere will be kept and propagated. Ions outside the sphere boundary will be dropped.  The clipping object can be placed in 3D by dragging the in-scene object around. Note that holding down Ctrl and shift whilst dragging alter the plane of motion (in-screen, across screen etc).
-
-\begin{itemize}
-\item  \textbf{Mode}: Select the fundamental primitive used to divide the incoming ions into two groups (inside and outside). Sphere, Cylinder and Plane modes are available.
-\item \textbf{Invert clip}: Reverse the action of the filter, \emph{i.e.}\ swap the definition of ``inside'' and ``outside''.
-\item  Various positioning parameters; These can be typed in manually, or set by manipulating the clipping object in the 3D view with the mouse.
-
-\end{itemize}
-
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Clipping.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & Yes & Yes\\
-Plot & No & No & No\\
-Drawable & No & Maybe & No \\
-Range & No & No & No\\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-
-\end{center}
-\end{table}
-}%
-
-If the drawing primitive is set to be shown, then a drawable stream will be emitted from the filter.
-\FloatBarrier
-\subsubsection{Spectrum}
- This will generate a histogram of the ``value'' of ions passing through the filter. Note that no output other than the histogram is generated. Plots can be assigned a colour, set to logarithmic or non-logarithmic mode, or restricted to only cover a specific region. The plot title is taken from the filter name, some limited \LaTeX is supported (note that the ``$\backslash$'' symbol is a special \LaTeX command; you may need to use ``$\backslash$$\backslash$'' to represent a single ``$\bac [...]
- 
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Spectrum.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & No & Yes & Yes\\
-Plot & Yes & No & Yes\\
-Drawable & No & No & Yes \\
-Range & No & No & Yes\\
-Voxel & No & No & Yes \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-\FloatBarrier
-\subsubsection{Profile}
- 
-The profile filter conducts a density or ``compositional'' analysis of a given sub-region of 3D space. The action of the profile filter depends upon whether the incoming ions have been ``ranged''. If not, then the profile filter generates a density profile of the ions inside a cylindrical volume by count, which is visible in the 3D view. If the ions have been ranged, then the frequencies are on a per-species basis. \emph{Properties}
-\begin{itemize}
-\item \textbf{Normalise}: The action of this option converts the density into a fractional one. For ranged ions, this is the local composition. For unranged ions this is the relative density.
-
-\end{itemize}
-
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Profile.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & No & Yes & No\\
-Plot & Yes & No & No\\
-Drawable & Maybe & No & No \\
-Range & No & If available & No \\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-Drawable will be emitted if the ``Show Primitive'' option is selected.
-\FloatBarrier
-\subsubsection{Spatial Analysis}
-
- This filter conducts spatially oriented data analysis of incoming ions, and reassigns the `value' component of the ion data. The nature of the reassignment depends upon the selected algorithm and the incoming data itself. Note that the exact values computed by the spatial algorithms may be affected by subsampling; however trends are usually unaffected, provided the number of incoming data elements is sufficiently large. 
-
-\paragraph{Algorithms}:
-\begin{itemize}
-\item \textbf{Local Density}: This computes the local density of the ions on either a nearest neighbour, or a fixed distance metric. The density is then assigned as the point value. Note that the number of points to be examined increases rapidly in the fixed distance metric, and may rapidly become untenable. Clipping the volume of data to reduce the time is an option, however surface effects can occur.
-\item \textbf{Density filtering}: computes density as per local density, however ions are retained (or not) depending upon a chosen cutoff density,  whilst retaining the original point value.
-\item \textbf{Radial distribution}: Computes the local environment for each ion, and generates a histogram of the number of points within a spherical section surrounding each ion. 
-\end{itemize}
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Spatial Analysis.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Maybe & Maybe & No\\
-Plot & Maybe & No & No\\
-Drawable & No & No & No \\
-Range & No & Maybe & No \\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-Ion, plot and range emit and usage patterns are dependant upon the selected algorithm. Local density and density filtering do not emit plots, and density filtering does allow range propagation.
-\FloatBarrier
-\subsubsection{Clustering analysis}
-
-The cluster analysis filter is designed to aid in the detection and analysis of spatial clustering in segregated data. Cluster analyses are used to determine the extent of non-random spatial relationships between dataset members. The cluster analysis filter must be preceded by a ``ranging'' filter in order to allow for identification of different value types in the dataset
-
-The method works by identifying two data types -- ``core'' and ``bulk'' members of the dataset (in APT these are usually called ``solute'' and ``matrix''). The program attempts to determine adjacencies between core elements, and to group them together, extracting them from the bulk of the dataset. To do this, the filter uses the scalar value associated with each point to classify it. Range data (which must be present as a parent filter), is used to identify regions of value to classify v [...]
-
-The clustering algorithm implemented in \emph{3Depict} is a modification of the clustering algorithm outlined in Stephenson \emph{et al}\cite{Stephenson07}, and to a lesser extent Hyde \emph{et al}~\cite{Hyde10} and Vaumousse and Cerezo~\cite{Vaumousse03}\footnote{These sources are not freely available. Some of these concepts are discussed by in this work which is available online: ``Design in Light Alloys by Understanding the Solute Clustering Processes During the Early Stages of Age Ha [...]
-
-
-Parameter Description:
-\begin{itemize}
- \item \textbf{Core classification distance}: This distance is the maximum distance between which items initially marked ``core'' by their value can be separated from another core point (up to Core kNN Max) in order to not be discounted in the clustering. This aids in removing isolated points that are initially marked as core. This option is disabled if the value is set to 0.
- \item \textbf{Core kNN max}: The Core k-th nearest neighbour maximum for core classification. This modifies the core classification stage, only looking up to some max kNN (unclassified core only) for other core points
-\end{itemize}
-
-Algorithm Description; each of these is conducted in sequence to generate the final clustered output.
-\begin{itemize}
- \item \textbf{Core Classification (Optional,\emph{Core Classify Dist} nonzero)}: Core classification; work only on core ions (bulk is ignored). Each ``core'' point has sphere of specified size placed around it, if point's kth-NN is within a given radius, then it is used as core, otherwise it is rejected to ``bulk''.
-
- \item \textbf{Cluster Construction}: A ``backbone'' is constructed using the core points (after classification). Each core point has a sphere placed around it of fixed size; if it  contacts another point, then these are considered as part of the same cluster.
- \item \textbf{Bulk Inclusion (Optional, \emph{Bulk Link Dist} nonzero)}: For each cluster, every point has a sphere placed around it. Bulk points that lie within this union of spheres are assigned to the cluster. This assignment is unambiguous \emph{iff} this radius is smaller than half that for the cluster construction step
- \item \textbf{Bulk Erosion (Optional, \emph{Erode Dist} nonzero)}: Each unclustered bulk ion has a sphere placed around it. This sphere strips out clustered ``bulk'' points from the cluster and returns them to the unclustered data. This is only done once (\emph{i.e.}, not iterative).
-\end{itemize}
-
-Note that there are more steps listed in the filter progress due to the need to generate data query structures.
-
-Several post-processing options are available as part of the filter. The size distribution (number of items) can be computed, as can the composition. A frequency table is generated and printed to the program console. Note that the ``count bulk'' parameter specifies whether to include points classified as ``bulk'' in these frequency and chemistry tables or not.
-
-Whilst much effort has been placed into optimisation of the clustering algorithm, the query itself is quite slow. The clustering algorithm is best operated on a small region of data to optimise the parameters prior to applying the algorithm to the full dataset.
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Clustering Analysis.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & Yes & Yes\\
-Plot & Maybe & No & No\\
-Drawable & No & No & No \\
-Range & No & Yes & No \\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-\FloatBarrier 
-\subsubsection{External Program}
- 
-This allows the program to run external commands on the system in order to link into other programs. Note: Loading a state file with this filter will result in the user being prompted to the existence of ``potentially hazardous elements'' in the filter tree, and will give the user the option of removing them. If you are presented with this warning you are highly recommended to discard these elements unless you know better, as it is possible for arbitrary computer programs to be executed  [...]
-
-
-\paragraph{Command syntax: } The syntax for specifying the program command uses \% as the escape character. If you wish to pass a single \% to the command line, you can use \%\%. \%i will be substituted with the first pos file's name, repeated uses will use the second, third and so on-th pos file name. If there are not enough incoming ion streams to be converted to pos files, then the filter will report an error. You can use \%I to substitute all pos files (space separated) to the comman [...]
-
-\paragraph{Prior to program execution:} Ion data coming into this filter will be saved in the folder ``inPos'' inside the  specified working directory, with the prefix ``pos'', in the pos format (Section~\ref{sec:posformat}).  Plots will be saved as tab separated files with the prefix ``xy''. If there is no input to the filter, and thus no files, the program will not be run. By default, the program that is executed will have these files passed as arguments to the function, appended to th [...]
-
-At this point, the target command will be run. \emph{3Depict} will halt at this point, and await the completion of the underlying program.
-
-\paragraph{After program execution:} Once the program is run, any .pos files (\emph{i.e.}\ any files matching `*.pos') in the working directory will be loaded back as ion streams. Similarly any `*.xy' files will also be loaded. .xy files should be ASCII files, and should have a multiple of 2 columns (one for x, one for y) separated by a valid delimiter. The x and y column lengths must also match for each x-y pair. Valid delimiters are tab, comma and space. At time of writing, there is cu [...]
-
-Input files will be semi-randomly named to mitigate ``collision'' problems in the case that multiple instances of \emph{3Depict} are being used.
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for External Program.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Maybe & Yes & Yes\\
-Plot & Maybe & Yes & Yes\\
-Drawable & No & No & Yes \\
-Range & No & No & Yes \\
-Voxel & No & No & Yes \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-\FloatBarrier
-\subsubsection{Annotation}
-The annotation filter allows for insertion of 3D annotations into the 3D scene. The annotations that are allowable include linear and angular measurements, as well as textual markers and text+line pointing markers. Each annotation mode has an associated colour which is specifiable. 
-
-\paragraph{Text}
-Displays a 3D textual marker in the 3D scene, using a fixed font.
-\begin{itemize}
-\item \textbf{Annotation}: The text to display.
-\item \textbf{Origin}: The position of the lower left hand corner of the text bounding box in 3D space.
-\item \textbf{Up Direction}: The vector that is associated with the up direction of the text glyphs. Note that altering this may cause the across direction to change, due to the orthogonality requirement.
-\item \textbf{Across Dir}: The across direction for the text, which corresponds to the left-to-right reading direction. Similarly to the up-direction altering this may cause the up direction to change to maintain orthogonality.
-\item \textbf{Text Size}: The size of the text glyphs, in world units.
-\end{itemize}
-
-\paragraph{Arrow, Arrow with Text}
-Displays an arrow from one position to the other. This can be directly interacted with in the 3D scene. The Arrow+Text mode allows for a specifiable arrow and associated text point in 3D space in one. 
-
-\paragraph{Angle Measurement}
-Displays a 3D widget which can be used to mark angular relations in 3D space. 
-\begin{itemize}
-\item \textbf{Up dir} Controls the up direction for the text glyphs. Note that altering this value may cause the across direction to change in order to maintain orthogonality.
-\item \textbf{Across dir} Controls the across direction for the text. Note that altering this value may cause the up direction to change, to maintain orthogonality.
-\item \textbf{Reflexive} If selected, the reflexive (exterior) angle will be displayed, rather than the interior angle for the angular measurement.
-\item \textbf{Show Angle} Will display the angle measured by the marker in the 3D scene, if selected. 
-\item \textbf{Text Size} Controls the text size for the angle measurement, if the angle is shown. 
-\item \textbf{Digit format} Controls the number of significant digits to use, such as '\#\#.\#\#', which will show (for example), 10.78 as the degree value. Use \#, or 0-9 as placeholders to specify the format. Allowable decimal separators are period (.) and comma (,).
-
-\item \textbf{Sphere size} Sets the size of the sphere widgets which are used to manipulate and draw the angular measurement positions.
-\end{itemize}
-
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Annotation.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & No & No & No\\
-Plot & No & No & No\\
-Drawable & Yes & No & No \\
-Range & No & No & No \\
-Voxel & No & No & No \\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-\FloatBarrier
-\subsubsection{Voxels}
-
-This filter discretises space into a series of 3D cubed regions, known as ``Voxels'' (Volume Pixels). Voxels can be used to alter a point cloud into a discrete volume of counts associated with each region. For example, the number of points inside each cube can be used as the counting metric, the number of points of a certain ion type, or the ratio of the number of points within a given region.
-
-At this time, there are three representations for Voxels:
-\begin{itemize}
- \item Point Cloud - usses a colour value to display the value stored in the voxel, with a grid of points based at the centre of each voxel.
- \item Axial Slice - 
- \item Isosurface - Visually segment regions of high and low intensity within the data volume, by building a dividing surface between these two regions
-\end{itemize}
-
-If a range file is present in the input, this can be used to perform per-range computations, such as ratio voxelisation specific to particular species. Figure~\ref{fig:voxeliseDisplayType} shows the different representations on the same input data.
-
-\begin{figure}
- \centering
-  \includegraphics[keepaspectratio=true,width=0.9 \textwidth]{./figures/voxel-representations.png}
-
- \caption{Voxelisation filter, showing different representations. Left to right shows point cloud, axial slice and isosurface mode on the same dataset}
- \label{fig:voxeliseDisplayType}
-\end{figure}
-
-
-Note that the limits of the values associated with the voxels will be printed on the console after the filter has refreshed -- this can be used, for example, to set the limits for isosurface representation.
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Voxels.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & No & Yes & Yes\\
-Plot & No & No & Yes\\
-Drawable & Yes & No & No\\
-Range & No & Yes & No\\
-Voxel & Yes & No & Yes\\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-\FloatBarrier
-\subsection{Ion Colour}
-
-This filter allows for the association of a particular colour to an ion, based upon the value of the ion, and the desired colour scheme. By selecting a start and end value for the colour scheme, Points can be given a colour that interpolates between these two values. The ion's value (as, for example, visible in a spectrum histogram) is used to set the colour for that point.
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Ion Colour.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & Yes & Yes\\
-Plot & No & No & No \\
-Drawable & Yes & No & No\\
-Range & No & No & No\\
-Voxel & No & No & No\\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-
-\FloatBarrier
-\subsection{Ion Transform}
-
-This filter allows for the transformation of the XYZ or value of a given point, based upon the chosen filtering algorithm. The available algorithms for transformation of a point are as given:
-
-\begin{itemize}
- \item \textbf{Translate}: Slide the dataset.
- \item \textbf{Scale}: Increase or decrease the size of the dataset.
- \item \textbf{Rotate}: Rotate the dataset around a given axis, by a given angle. \emph{E.g.}\ to rotate around the Z axis, set the axis to (0,0,1) , and provide the desired rotation. Euler angles are not used due to their mathematical singularities.
- \item \textbf{Value shuffle}: Scramble the values associated with each point -- \emph{i.e.}\ randomly re-assign each point some point's value, randomly picked from the dataset. Every value in the initial dataset will be present in the final dataset, in exactly the same frequency.
- \item \textbf{Spatial Noise}: Apply some noise to the value associated with each point, from a chosen noise distribution.
-\item \textbf{Translate value}: Move the value associated with each by a specified amount (\emph{i.e.}, $Value_{new} = Value_{orig} + someValue$).
-\end{itemize}
-
-
-{%
-\newcommand{\mc}[3]{\multicolumn{#1}{#2}{#3}}
-\begin{table}[!h]
-\caption{Propagation matrix for Ion Transform.}
-\begin{center}
-\begin{tabular}{llll}
-\hline
-\mc{1}{c}{\textbf{\underline{Stream}}} & \mc{1}{c}{\textbf{\underline{Emit}}} & \mc{1}{c}{\textbf{\underline{Use}}} & \mc{1}{c
-}
-{\textbf{\underline{Block}}}\\
-\hline \\ [-2.2ex]
-Ion & Yes & Yes & Yes\\
-Plot & No & No & No \\
-Drawable & Maybe & No & No\\
-Range & No & No & No\\
-Voxel & No & No & No\\
-\hline 
-\end{tabular}
-\end{center}
-\end{table}
-}%
-
-A drawable will only be emitted if the ``show marker'' option is selected.
-\section{Attributions}
-
-\begin{itemize}
-\item The source code image is  a derivative work of \url{http://commons.wikimedia.org/wiki/File:User_icon_2.svg} and  \url{http://commons.wikimedia.org/wiki/C_cplusplus_compilation_process.svg}.
-
-\item The camera image is a derivative work of \url{http://commons.wikimedia.org/wiki/File:Icon_Camera.svg}.
-\end{itemize}
-
-\section{Licence}
-This document is licenced under the Creative Commons 3.0 ShareAlike licence. \url{http://creativecommons.org/licenses/by-sa/3.0/}
-
-\section{Appendices}
-\label{sec:appendix}
-\subsection{Paths}
-\label{sec:3DepictPaths}
-\emph{3Depict} uses one of several different paths for storing configuration and autosave information, depending upon your host operating system. 
-\begin{itemize}
- \item Linux-like : your home directory, in th .3Depict folder. \emph{e.g.} \path{/home/someuser/.3Depict/}
- \item Mac OSX :\path{/Users/someuser/Documents/.3Depict/}
- \item Windows : usually \path{C:\Documents} \path{and} \path{settings\someuser\Documents\.3Depict\} %Sigh - path macro doesn't work with whitespace!
-\end{itemize}
-
-\subsection{File formats}
-
-\subsubsection{State file}
-\label{sec:xmlstatefile}
-The state file is an XML file, which is generated by \emph{3Depict}. XML is short for eXtensible Markup Language, and describes  a basic format for data layout. In XML files, the file consists of elements, attributes and text. Each element is marked by the use of angle brackets, as in ``$<$element$>$''. Each element must have a start and an end marker, for example $<$element$>$ is the start marker, and must be followed by its end marker $<$/element$>$. These elements can be nested or in  [...]
-
-A full description of the XML language is beyond the scope of this document, however many resources can be found online to explain the concept. The extensible bit means that \emph{3Depict} can define its own elements. Hence the exact format is subject to change from version to version.\footnote{Technical note: As of time of writing, the authors have not created a Document Type Descriptor (DTD) for the file which fully describes the file format. This may be done in future versions.}
-
-This is due to the rapidly changing nature of the filter properties. Unfortunately the most up-to-date documentation for the file format is the source code itself. For those who may be inclined to try to emulate this, you may wish to look at the VisController::saveState routine, and the \emph{Filter}::writeState routines.
-
-However, in general the file is divided into several sections. Below is an example file.
-\begin{verbatim}
-<threeDepictstate>
-    <writer version="0.0.1 Rev:232 (5e44e97bbba1)"/>
-    <backcolour r="0" g="0" b="0"/>
-    <filtertree>
-        <posload>
-            <userstring value=""/>
-            <file name="/home/user/data/data.pos"/>
-            <columns value="4"/>
-            <xyzm values="0,1,2,3"/>
-            <enabled value="1"/>
-            <maxions value="327680"/>
-            <colour r="1" g="0" b="0" a="1"/>
-            <ionsize value="2"/>
-        </posload>
-        <children>
-            <iondownsample>
-                <userstring value=""/>
-                <fixednumout value="1"/>
-                <fraction value="0.1"/>
-                <maxafterfilter value="5000"/>
-            </iondownsample>
-        </children>
-    </filtertree>
-</threeDepictstate>
-\end{verbatim}
-
-The state consists of the program version, to check that the program can actually interpret the file, a background colour, and the filter tree. 
-
-Optional elements which are not shown in this example include the stash data, and the camera information (here there is only the default camera).
-
-The filter tree is shown, with a pos load filter as the top level element, which has a child element of iondownsample. Note that the attributes of each element are dependant upon the filter. Again due to the rapidly changing nature of the program, this is subject to change.
-
-\subsubsection{Range files}
-\label{sec:rangeFormat}
-\emph{3Depict}'s interpretation of the Oak-Ridge format for range files is given below. The original specification is available in the book \textit{Miller, Atom probe: Analysis at the atomic scale}, (Kluwer Academic/Plenum Publishers, ISBN 0306464152). Additional information on the format is given by the PoSaP program, which to the author's knowledge is not online. Unfortunately, the specification given for the file is weakly stated, and is open to different interpretations. \emph{3Depic [...]
-
-A simple example file is given below, and is nominally in the ASCII 1 byte per character format. The original specification, to the authors knowledge, predates the UTF-8 and extended codepage support for non English languages. Thus non-English languages are not part of the file format - each should use the ``C'' locale for reading and writing, to avoid localisation concerns.
-
-\begin{table}
-\begin{verbatim}
-1 2
-Aluminium
-Al 1 1 1 Al
-------------- Al
-. 10.0 150 1
-. 150 200.2 1
-\end{verbatim}
-\end{table}
-
-The first line consists of two unsigned integers, separated by a space. The first integer is the number of unique ion types, and the second is the number of ranges. The next lines are taken as pairs. The first entry in the pair is the name of the ``ion''. The next entry consists of four parts. The first entry is a space terminated string, and is the shorthand name for the element. The next three elements are floating point values in the range of $[0,1]$, and are the colour of the ions th [...]
-
-This is repeated for each element pair, as specified by the first integer in the file. Each entry must be uniquely named, both in short and long names.
-
-The next line can nominally be ignored, however it should contain the dash character from positions 1 to 13, followed by a space separated list (with leading space) of the short names, as specified above. Sequence positions are \emph{not} obtained from the dash list, but rather from the order they appear in the file.
-
-Following this is a 2D table (space separated). The first column appears vestigial. The second and third columns contain the start and end ``range'' values for each ion. Note that these do not have to be in the same sequence as the original specification. These range values must be non-overlapping, and can be any 32 bit floating point number (other than NaN).
-
-The next columns are the range table, and specify which ions the range corresponds.
-
-In the \emph{3Depict} implementation, the table should have only entries of 0 or 1, and the row  (from column 3) should to exactly 1. Files where this is not the case may be accepted, however the exact interpretation for non 0/1 entries is unclear, and not specified in the file, so will be essentially treated as either a 0 or 1 value. 
-
-A more complex example is given below.
-
-\begin{verbatim}
-3 3
-Magnesium
-Mg 0.0 0.0 0.0
-Copper
-Cu 0.0 0.0 0.0
-Nickel
-Ni 0.0 0.0 0.0
-------------- Mg Cu Ni
-. 25 27 1 0 0
-. 25 33 0 1 0
-. 55.6 59 0 0 1
-\end{verbatim}
-
-Note that\emph{3Depict} guarantees to be able to read its own range files, and will do its best to read files generated by any major external program (within reason). If you have a file that you believe should be accepted, please contact the author.
-
-\subsubsection{POS files}
-\label{sec:posformat}
-This file is a four-field fixed width record file, with an integer number of entries. The file is uncompressed raw 32 bit IEEE754 floating point data, and can be loaded using most languages relatively easily. Note that the order of the floating point numbers ``endian-ness'' is fixed as big-endian. The floating point values are X,Y,Z and an arbitrary scalar value. The file may not contain invalid (Not-a-Number ``NaN'') values. \emph{3Depict} will accept files with different numbers of rec [...]
-
-\subsubsection{Text files}
-\label{sec:textformat}
-The text files that are accepted by \emph{3Depict} must be ASCII formatted, and consist of at least four columns of data, separated by an acceptable delimiter. The accepted delimiters are currently tab, space and comma. The numeric format must be in the English locale, \emph{i.e.}\ with a period used as the decimal separator, consisting of the digits 0--9 and the + and - symbols.
-
-Each file may have a contiguous header that does not consist of this format, however if ANY portion of the header is interpretable as per the above, this will be considered to be the end of the header, and the remainder of the file is the file body. All lines in the file body must be interpretable as per the above.  
-
-Note that due to the need to do multiple passes over the text file to interpret it, and the need to do string to binary conversions, this will be considerably slower than using a POS formatted file for large inputs.
-
-
-
-\subsection{External Program Examples}
-\label{sec:externalProgExample}
-The ``external program'' filter can be used to transfer data on-the-fly between \emph{3Depict} and a separate program, allowing for an extension of the capabilities of \emph{3Depict}, without requiring direct modification of \emph{3Depict} itself. This is targeted at advanced users who wish to connect other programs to \emph{3Depict}, as part of their analysis toolchain. Here short, simple example programs are given in several languages. Specifically, we provide examples for  \emph{Scila [...]
-
-Each example will load an input file, generated from \emph{3Depict}, optinally alter the data, and then return the modified data back to \emph{3Depict}. The examples are for instructive purposes only, and do not reflect the optimal implementation of the specific task, in order to simplify the presented program. Not all features of the external program filter are presented in this Appendix. For the full documentation on the filter, see Section~\ref{sec:rangeFilter}.
-
-Files for the sample programs can be generated from the following inline examples, or alternately, can be downloaded form their respective URLs
-
-\begin{itemize}
- \item Scilab - \url{http://threedepict.sourceforge.net/samples/externalprogram/loadPos.sci}
- \item Python - \url{http://threedepict.sourceforge.net/samples/externalprogram/python-example.shs}
- \item BASH - \url{http://threedepict.sourceforge.net/samples/externalprogram/bash-example.py}
- \item C++ - \url{http://threedepict.sourceforge.net/samples/externalprogram/cpp-example.cpp}
-\end{itemize}
-
-
-
-\subsubsection{Scilab}
-This example uses the computational package \emph{Scilab} can be used with \emph{3Depict}. Scilab is available online, at \url{http://scilab.org} and is a general numerical computing package. 
-
-In this example, the script simply opens a file, moves the point cloud by -1,-1,-1, then saves the output. The output, and input (due to the Bounding box filter) are both visible in Figure~\ref{fig:externalProgScilabSample} - note the offset induced by the script. During refresh of the filter tree, the \emph{Scilab} interface appears, performs its computation, and then exits, as instructed by the script. Any desired computation could be performed at this stage - exiting \emph{Scilab} can [...]
-
-\begin{figure}
-\begin{center}
- \includegraphics[keepaspectratio=true,width=0.9 \textwidth]{./figures/externalProgScilab.png}
- \caption{Example program screenshot using the \emph{Scilab} sample script. The \%i value in the command line instructs \emph{3Depict} to take the first (and only the first) ion stream, and save it as an input file for the external program. }
- \label{fig:externalProgScilabSample}
- % externalProgBash.png: 1381x875 pixel, 72dpi, 48.71x30.86 cm, bb=0 0 1381 875
-\end{center}
-\end{figure}
-
-Note that as shown in the figure \emph{Scilab} is called using its `-args' parameter, which avoids \emph{Scilab} from attempting to parse the arguments you wish to pass to the script as its own. Further note that this example will not work if any filename or directory (including the working directory) contains a space, due to this behaviour. In this case, \emph{3Depict} was launched from its own folder, which does not contain a space.
-
-\begin{verbatim}
- //Example function for loading, manipulating and writing 
-// pos files in scilab, for integrating with 3Depict's 
-// external program filter
-
-
-//-------
-function [errState, x,y,z,m]=loadPos(filename)
-
-x=[];y=[]; z=[]; m=[];
-
-//get filesize
-[fileInf,ierr] = fileinfo(filename)
-filesize=fileInf(1);
-
-//ensure filesize has 16 as a factor.
-if ( modulo(filesize,16) ~= 0 ) 
-    errState=1;
-    return
-end
-
-numEntries=filesize/16;
-
-//Open the file for read only, in binary mode
-[fd, err] = mopen(filename,'rb');
-
-//Check to see we are A-OK
-if err ~= 0
-    errState=2;
-    return
-end    
-
-//Read the data in as floating point values in big-endian format
-data=mget(numEntries,'fb',fd);
-
-//check read OK
-if merror(fd)
-   errState=3;
-   mclose(fd);
-   return
-end
-
-//Unsplice data, which was stored as xyzmxyzmxyzm...
-x=data(1:4:$)';
-y=data(2:4:$)';
-z=data(3:4:$)';
-m=data(4:4:$)';
-
-clear data;
-
-mclose(fd)
-
-errState=0;
-
-endfunction
-
-function err=writePos(filename,x,y,z,m)
-    //Check that the array sizes match
-    sizes = [ length(x), length(y),length(z),length(m)];
-    if max(sizes) ~= min(sizes) 
-        err=1;
-        return
-    end
-    
-    //Open the file write, in binary mode
-    [fd, errState] = mopen(filename,'wb');
-    
-    if(errState)
-        err=2;
-        return;
-    end
-    
-    //Build a matrix to dump the data into 
-    // in xyzmxyzmxyzm form 
-    data=zeros(sizes(1)*4,1);
-    data(1:4:$) = x;
-    data(2:4:$) = y;
-    data(3:4:$) = z;
-    data(4:4:$) = m;     
- 
-    mput(data,'fb',fd);
-    
-    //Check for io error
-    if merror(fd) ~=0
-        mclose(fd);
-        err=3;
-        return;
-    end
-    
-    err=0;
-    mclose(fd);
-endfunction
-
-//-------
-
-//START OF SCRIPT
-
-//Inform scilab we may need lots of ram.
-stacksize('max'); 
-
-//Strip out the script arguments from the general scilab arguments
-argsArray=sciargs();
-realArgs=[];
-numArgs =length(length(argsArray)); //'cause length() is dumb on strings.
-for i=1:numArgs
-    if argsArray(i) == '-args' & i != length(argsArray);
-        realArgs=argsArray(i+1:$);
-    end
-end
-
-if( length(argsArray) == 0)
-    error('no file to open!');
-end
-
-//Load the first argument
-[errState, x, y, z, m] = loadPos(realArgs(1));
-if errState
-    error( strcat(['Unable to load posfile, :( ' realArgs(1)]));
-else
-    printf('Opened file: %s ',realArgs(1));
-end
-
-
-//Draw the point cloud
-scf
-drawlater
-plot3d1(x,y,z)
-f=gcf();
-pointCloud=f.children.children;
-pointCloud.surface_mode="off";
-pointCloud.mark_mode="on";
-drawnow
-
-
-//plot a histogram of m, avoiding the error where m has no span
-// by artifically adding two elements, if needed.
-scf();
-if max(m) ~= min(m)
-    histplot(100,m);
-else
-    histplot(100,[min(m)-1; m; max(m)+1]);
-    
-end
-
-
-//Now shift each point around 
-x=x-1;
-y=y-1;
-z=z-1;
-
-
-//now write the file back
-err=writePos('output.pos',x,y,z,m);
-if  err~= 0
-    error('failed to write posfile, :(');
-end
-
-//Kill Scilab, because were done and would like to go back to 3Depict.
-exit
-
-
-
-\end{verbatim}
-
-
-
-
-\subsubsection{Python}
-This example demonstrates using \emph{Python} to interact with \emph{3Depict}. The following example does very little - it simply loads all input pos files (due to the \%I in the program invocation), and merges the contents. The results of the computation are shown in Figure~\ref{fig:externalProgPythonSample}.
-
-\begin{figure}
-\begin{center}
- \includegraphics[keepaspectratio=true,width=0.85 \textwidth]{./figures/externalProgPython.png}
- \caption{Example program screenshot without and with the Python test example present. Note that the program merges ion streams into a single pos file, which is re-loaded as a single ion stream, as marked by the arrows.}
- \label{fig:externalProgPythonSample}
- % externalProgBash.png: 1381x875 pixel, 72dpi, 48.71x30.86 cm, bb=0 0 1381 875
-\end{center}
-\end{figure}
-
-\begin{verbatim}
-#!/usr/bin/python
-
-import sys
-import os 
-
-
-#Function to append the contents of one file to another
-def appendFile(sourceFile,targetFile):
-	try : 
-        fileSrc = open(sourceFile,"rb")
-        fileTarget = open(targetFile,"ab")
-    
-        #Extremely inefficient!!
-        byte = fileSrc.read(1)
-        while byte != "" :
-            fileTarget.write(byte)
-            byte=fileSrc.read(1)
-
-    except IOError:
-        return 1
-
-    return 0
-
-def main():
-    argv = sys.argv
-    #Name of file that we will dump our results to
-    OUTPUT_POSFILE="output.pos"
-
-    #Remove any old files from previous runs
-    if os.path.isfile(OUTPUT_POSFILE) :
-        os.remove(OUTPUT_POSFILE)
-
-
-    # do nothing if we have no arguments
-    if(len(argv) < 2) :
-        return 0;
-
-    #Loop over all our inputs, then for .pos files, 
-    # create one big file with all data merged 
-    for i in argv[1:] : 
-        print "given file :" + i
-
-        fileExt = i[-3:];
-        if fileExt  == "pos" :
-            if appendFile(i,OUTPUT_POSFILE):
-                return 1; #Output to file failed, for some reason
-            else : 
-                print "appended file to " + OUTPUT_POSFILE
-
-        else :
-            #Filename did not end in .pos, lets ignore it.
-            print "File :" + i + " does not appear to be a pos file"
-
-
-    return 0
-
-if __name__ == "__main__":
-    sys.exit(main())
-\end{verbatim}
-
-\subsubsection{Bash}
-
-The following trivial program shows how \emph{3Depict} can be used send data to and from Bourne Again SHell (\emph{BASH}) programs. \emph{3Depict} was launched with one pos file, and an external program filter, as shown in Figure~\ref{fig:externalProgBashSample}. The script used in the test, named ``test.sh'' and placed in the specified working directory (see figure), is given below. The object of the script is only to demonstrate that the script can be used to perform arbitrary actions, [...]
-
-\begin{figure}
-\begin{center}
- \includegraphics[keepaspectratio=true,width=0.85 \textwidth]{./figures/externalProgBash.png}
- \caption{Example program screenshot when using the BASH test example.}
- \label{fig:externalProgBashSample}
- % externalProgBash.png: 1381x875 pixel, 72dpi, 48.71x30.86 cm, bb=0 0 1381 875
-\end{center}
-\end{figure}
-
-\begin{verbatim}
-#!/bin/bash
-
-BYTES_PER_RECORD=16
-echo "Num args : "$#
-echo "Working Directory:"  $(pwd)
-
-#Cleanup any previous script-output file
-rm script-output-3Depict-input.pos
-
-for (( i=1; i<=$#; i++ )); 
-do
-        #Get the name of the input file
-        eval arg=\$$i
-        echo "Input file: $arg"
-
-        #Print some info about the file  
-        echo "File size:" $(filesize $arg) " Bytes"
-        NUM_IONS=$(expr $(filesize $arg) / $BYTES_PER_RECORD) 
-        echo "Num Ions:" $NUM_IONS 
-
-        #Copy the output into the working directory, so that 3Depict's 
-        # scanning of the working directory
-        # for .pos files will find it
-        cat $arg >> script-output-3Depict-input.pos
-done 
-
-exit 0
-\end{verbatim}
-
-The output from running the refresh cycle is given, as it appears on the program console (to replicate this mac/windows users may need to redirect the output to a file in order to see the output text (this can be done in bash), or mac users may launch \emph{3Depict} from terminal.app).
-
-Firstly, note that the \emph{same file} is written to each time - \emph{3Depict} does not delete the ``script-output-3Depict-input.pos``, so if this is named differently between refreshes, multiple pos files would be generated and \emph{3Depict} would load them all. Finally, the statement \texttt{exit 0} is used to ensure that \emph{3Depict} knows that the program terminated succesfully. Recall that returning a nonzero value will inform \emph{3Depict} that some error occured during proce [...]
-
-\begin{verbatim}
-Working Directory: /home/username/3Depict/src
-Input file: /home/username/3Depict/src//inputData/pointdataDNUlfP.pos
-File size: 5242880  Bytes
-Num Ions: 327680
-\end{verbatim}
-
-The output from the program will be similar to the following text.
-\begin{verbatim}
-given file :/home/auser/Desktop/3Depict/src//inputData/pointdatad7hfUw.pos
-appended file to output.pos
-\end{verbatim}
-
-\subsubsection{C/C++}
-For \emph{C/C++}, an example is given. The example here is somewhat more complex than the rest, as in this case, we do not simply treat the data as a series of bytes, bt we additionally perform the data transformation steps required to get it into a usable form (ie as a list of correctly ordered bytes in memory, in a useful variable). This was not done for the previous examples.
-
-Note that as C/C++ are compiled languages, it is necessary to be able to be able to generate a binary (executable) version of the program - this procedure is not described here, but users are encouraged to be comfortable with this process before attempting to implement the following examples for themselves. The exact procedure for doing this is outside of the scope for this document - you will require a compiler, such as \emph{gcc}'s \emph{g++} compiler, which you will most likely want t [...]
-
-For this program, once your compiler is installed, and assuming you use \emph{gcc}, the normal procedure is to place the following code into a text file called \texttt{example.cpp}, then run \texttt{g++ example.cpp -Wall -o example}, to produce the binary. You must be execute that command in the same folder as the example.cpp file is located. 
-
-This produces a binary file, called ``example'' under linux/OSX or ``example.exe'' under windows, now setting up \emph{3Depict} as per Figure~\ref{fig:externalProgCppSample}, several ranged ionstreams are passed to the program, which are merged into a single file. This single file is detected automatically by \emph{3Depict}, as it is a file ending in ``.pos'', and is located in the working directory - it is thus assumed to be loadable.
-
-\begin{figure}
-\begin{center}
- \includegraphics[keepaspectratio=true,width=0.85 \textwidth]{./figures/externalProgCpp.png}
- \caption{Example program screenshot without and with the C++ test example present..}
- \label{fig:externalProgCppSample}
- % externalProgBash.png: 1381x875 pixel, 72dpi, 48.71x30.86 cm, bb=0 0 1381 875
-\end{center}
-\end{figure}
-
-\begin{verbatim}
- 
-#include <iostream>
-#include <cstdlib>
-#include <vector>
-#include <fstream>
-
-using namespace std;
-
-enum
-{
-    ENDIAN_LITTLE,
-    ENDIAN_BIG,
-    ENDIAN_DUNNO,
-};
-
-int endian=ENDIAN_DUNNO;
-
-const int ENDIAN_TEST=1;
-
-//Run-time detection of CPU endian-ness
-//---
-inline int is_bigendian() { return (*(char*)&ENDIAN_TEST) == 0 ;}
-inline int is_littleendian() { return (*(char*)&ENDIAN_TEST) == 1 ;}
-
-void detectEndianNess()
-{
-    if(is_littleendian())
-        endian=ENDIAN_LITTLE;
-    else if (is_bigendian())
-        endian=ENDIAN_BIG;
-    else 
-        endian=ENDIAN_DUNNO;
-}
-//---
-
-struct POS_DATA
-{
-    float values[4];
-};
-
-
-//A routine for flipping data bytes around between
-// big and little endian IEEE754 format
-void floatSwapBytes(float *inFloat)
-{
-    //Use a union to avoid strict-aliasing error
-    union FloatSwapUnion{
-       float f;
-       char c[4];
-    } ;
-    FloatSwapUnion fa,fb;
-    fa.f = *inFloat;
-
-    fb.c[0] = fa.c[3];
-    fb.c[1] = fa.c[2];
-    fb.c[2] = fa.c[1];
-    fb.c[3] = fa.c[0];
-
-    *inFloat=fb.f;
-}
-
-//A not-particularly efficient pos-file loader
-// returns true on success, false on failure
-bool loadPosFile(const std::string &str,vector<POS_DATA> &p)
-{
-    //open file for "binary" access mode
-    ifstream file(str.c_str(),ios::binary);
-
-    //Check file opened OK
-    if(!file)
-        return false; //open failed
-
-
-    //Check filesize (in bytes)
-    // we do this by jumping to the end,
-    // asking the offset, then jumping back to the start
-    // as this is very cross-platform (but probably inefficient)
-    file.seekg(0,std::ios::end);
-    size_t fileSize=file.tellg();
-    file.seekg(0,std::ios::beg);
-
-    //Filesize must be 4 4 byte floats
-    if(fileSize %16)
-        return false;
-
-    //OK, now read the contents    
-    size_t numEntries=fileSize/16;
-    POS_DATA pd;
-    for(size_t ui=0;ui<numEntries;ui++)
-    {
-        //Read one POS entry (x,y,z,value)
-        file.read((char*)pd.values,16);
-    
-        if(!file.good())
-            return false;    
-
-        //Flip the bytes around to match CPU
-        // ordering, if needed (eg all x86/x86-64 systems)
-        if(endian == ENDIAN_LITTLE)
-        {
-            for(unsigned int uj=0;uj<3;uj++)
-                floatSwapBytes(pd.values+uj);
-        }
-
-        p.push_back(pd);
-    }
-
-    return true;
-}
-
-bool writePosFile(const std::string &filename,const vector<POS_DATA> &p)
-{
-    //This function assumes floats are 4 bytes
-    if(sizeof(float) !=4)
-        return false;
-
-    //Open the file for output
-    ofstream file(filename.c_str(),ios::binary);
-    if(!file)
-        return false;
-
-    if(endian == ENDIAN_LITTLE)
-    {
-        //On little endian machines, loading is a little complicated
-        // as we need to convert the pos output back to big-endian mode
-        // first
-        float values[4];
-        for(size_t ui=0;ui<p.size();ui++)
-        {
-            for(unsigned int uj=0;uj<4;uj++)
-            {
-                values[uj]=p[ui].values[uj];
-                floatSwapBytes(values+uj);
-            }
-            file.write((const char*)values,4*sizeof(float));
-        }
-    }
-    else
-    {
-        //On big endian machines, no conversion is neccesary, just write.
-        for(size_t ui=0;ui<p.size();ui++)
-            file.write((const char*)p[ui].values,4*sizeof(float));
-    }
-
-    //Check that nothing went askew whilst writing the file
-    if(!file.good())
-        return false;
-    
-    return true;
-}
-
-int main(int argc, const char *argv[])
-{
-    detectEndianNess();
-    
-    //Get all filenames from input arguments
-    vector<string> args;
-    for(int ui=1;ui<argc;ui++)
-        args.push_back(argv[ui]);
-
-    //accumulate pos data from all input files
-    vector<POS_DATA> p;
-    try
-    {
-        for(size_t ui=0;ui<args.size();ui++)
-        {
-            cerr << "Opening file" << args[ui] << endl;
-            if(!loadPosFile(args[ui],p))
-                return 1;
-        }
-    }
-    catch(std::bad_alloc)
-    {
-        cerr <<"Out of memory" << endl;
-        return 2;
-    }
-
-
-    //Write it into one file
-    cerr << "Writing output file..";
-    if(!writePosFile("someFileOrOther.pos",p))
-        return 3;
-
-    cerr <<"Done" << endl;
-
-    return 0;
-}
-
-\end{verbatim}
-
-\subsection{Modifying the program}
-
-As \emph{3Depict} is an open source program, you are free to modify it, or to extract useful bits subject to the licence agreement (See Section~\ref{sec:licence}). You will need a knowledge of C++ in order to reasonably understand the components of the program itself. A knowledge of OpenGL and wxWidgets is desirable, but you could pick this up as you went along, and don't really need it for many parts of the program.
-
-This section of the manual is the hardest to write, and the most likely to not be applicable to your context, as it depends heavily on the computer system you are trying to use. Nevertheless, this section will attempt to explain how to get yourself set up to build. To modify the program, you must first be able to build the base version of the program from source code. This is by far easiest under a Linux system, as packaging programs can allow you to auto-import all the needed components [...]
-
-\subsubsection{Development tools}
-The program was primarily developed using C++ (gcc), and utilises autotools for the build scripts. Some custom Bourne-again shell (BASH) scripts are used to do side tasks, such as dependency retrieval and compilation and .app package building (for OSX, really). Mercurial is used for version control. The program is developed using a private repository, which is synced up to the Sourceforge repository periodically. My personal tools for development are the VIM editor and the command line.  [...]
- 
-The main libraries used for the program are:
-
-\begin{itemize}
-\item wxWidgets - User interface, \url{http://www.wxwidgets.org}
-\item mathgl - Plot generation, \url{http://www.mathgl.sourceforge.net}
-\item ftgl -  3D text, \url{http://www.ftgl.sourceforge.net}
-\item libxml2 -  XML parsing and validation, \url{http://xmlsoft.org}
-\item qhull -  Convex hull compuations, \url{http://www.qhull.org}
-\item gettext and iconv- Internationalisation \url{http://www.gnu.org/software/gettext/}
-\item libpng - PNG image reader/writer library \url{http://libpng.org}
-\item freetype2 - font loader library \url{http://freetype.org/}
-\end{itemize}
-
-
-\subsubsection{Getting yourself set up}
-Compilation instructions vary from operating system to operating system. In increasing order of complexity to generate a compilation, Linux, mac, and windows versions can be built from source. Instructions for compilation change frequently, and the most up to date version is available on the project website.
-
-If you are running a Debian or Debian derived distribution, all you need to do is to run these commands as an admin user \texttt{sudo aptitude install build-essential}, which will install a compiler and the needed build scripts. Then run \texttt{sudo apt-get build-dep 3depict}, this will install all the needed components to install the program.
-
-Once this is done, you can download the latest source code from the website, unzip it, and then run \texttt{./configure \&\& make}. This builds the program. You can now modify any of the files, then recompile it simply running \texttt{make}. By examining the options listed by \texttt{./configure --help}, the configuration of the program can be altered to some extent (\emph{e.g.}, enable/disable debug checks, or computational parallelism).
-
-\subsubsection{Changing stuff}
-As \emph{3Depict} is open source, it can be modified in the case any error fixes, extentions or other alterations to the program are  desired. However, a certain level of prerequisite knowledge is necessary to effectively alter the program. If altering code in \emph{3Depict}, You should be familiar with C++, as well as compiling multi-file programs. Depending upon the modification, you may need to have some familiarity with the mathematical problems you need to solve and with libraries u [...]
-
-
-The internal structure of the program can be more easily seen from the Doxygen documentation, which is listed online, or can be generated from the source files themselves via the Doxygen tool. If you want to have a play around with the code, try getting it to compile first, before trying to change anything. Feel free to drop us a line on the website to ask about the change you want to make, and how it could be most easily achieved in the code.
-
-All you have to do now is to modify the .cpp and .h files to do what you want, this is going to be specific to what you want to do, and thus it is impossible for a ``walkthrough'' to be reasonably written. This is only here as a guide. To get started, the easiest components to change are probably the filters. These have been written to be as independent of the user interface as possible, so you need to know very little (almost nothing) about OpenGL or wxWidgets to modify them. 
-
-Each filter is an object derived from a base class, \texttt{Filter}.  To implement a new filter, you have to derive a new class, eg \texttt{MyFilter}, and implement the pure virtual functions to do what you want. To make it accessible from the user interface, you have to add a new entry in  \texttt{comboFilters\_choices} in the function \texttt{MainWindowFrame::MainWindowFrame($\ldots$)}, in \texttt{MainWindowFrame::OnComboFilter($\ldots$)} in \texttt{3Depict.cpp} as well as in \texttt{m [...]
-
-The main purpose of the filter design is is that each filter takes in something, and spits out something - by simply implementing a new filter, a new effect can be achieved. The filter's job is to convert input FilterStreamData, into some other output.  Each filter does all of its work in the \texttt{::refresh} functions. The easiest examples of this will probably be the ion info and transform filters. They might look a bit daunting, but much of the code is simply there to keep things ru [...]
-
-To have properties appear up in the left hand panel, you have to implement the \texttt{getProperties($\ldots$)} function -- try copying one that seems closest to your situation. To have these properties take effect, you need to implement the \texttt{setProperties($\ldots$)} function. If you wish to ``peek-ahead'' at the filters coming into the filter (this is a little advanced, but can sometimes be necessary), you have to implement the \texttt{initFilter($\ldots$)} function.
-
-\bibliographystyle{unsrt}
-\bibliography{manual}
-
-\end{document}
diff --git a/docs/manual-latex/manual.toc b/docs/manual-latex/manual.toc
deleted file mode 100644
index f9780b0..0000000
--- a/docs/manual-latex/manual.toc
+++ /dev/null
@@ -1,91 +0,0 @@
-\contentsline {section}{\numberline {1}Foreword}{1}{section.1}
-\contentsline {subsection}{\numberline {1.1}Introduction}{1}{subsection.1.1}
-\contentsline {subsubsection}{\numberline {1.1.1}Background}{1}{subsubsection.1.1.1}
-\contentsline {subsubsection}{\numberline {1.1.2}What is Open Source?}{1}{subsubsection.1.1.2}
-\contentsline {subsection}{\numberline {1.2}Requirements}{2}{subsection.1.2}
-\contentsline {subsection}{\numberline {1.3}Platform specific notes}{2}{subsection.1.3}
-\contentsline {subsection}{\numberline {1.4}Getting help}{3}{subsection.1.4}
-\contentsline {subsection}{\numberline {1.5}Who wrote this program?}{3}{subsection.1.5}
-\contentsline {subsection}{\numberline {1.6}Alternate documentation}{3}{subsection.1.6}
-\contentsline {subsection}{\numberline {1.7}Helping out}{3}{subsection.1.7}
-\contentsline {section}{\numberline {2}Basics}{3}{section.2}
-\contentsline {subsection}{\numberline {2.1}Getting started}{3}{subsection.2.1}
-\contentsline {subsubsection}{\numberline {2.1.1}Licence}{3}{subsubsection.2.1.1}
-\contentsline {subsubsection}{\numberline {2.1.2}Installing the program}{4}{subsubsection.2.1.2}
-\contentsline {subsection}{\numberline {2.2}Understanding the interface}{4}{subsection.2.2}
-\contentsline {subsubsection}{\numberline {2.2.1}The 3D View}{5}{subsubsection.2.2.1}
-\contentsline {paragraph}{Basic movement}{5}{figure.3}
-\contentsline {subsubsection}{\numberline {2.2.2}Plot area}{6}{subsubsection.2.2.2}
-\contentsline {subsubsection}{\numberline {2.2.3}Console}{6}{subsubsection.2.2.3}
-\contentsline {subsubsection}{\numberline {2.2.4}Tools panel}{7}{subsubsection.2.2.4}
-\contentsline {subsection}{\numberline {2.3}Usage fundamentals}{8}{subsection.2.3}
-\contentsline {section}{\numberline {3}Quick start}{9}{section.3}
-\contentsline {subsection}{\numberline {3.1}Loading data}{9}{subsection.3.1}
-\contentsline {subsection}{\numberline {3.2}Loading an analysis}{9}{subsection.3.2}
-\contentsline {subsection}{\numberline {3.3}Ranging}{9}{subsection.3.3}
-\contentsline {subsection}{\numberline {3.4}Spectrum}{10}{subsection.3.4}
-\contentsline {subsection}{\numberline {3.5}Composition profiles}{10}{subsection.3.5}
-\contentsline {subsection}{\numberline {3.6}Counting Points and measuring volume}{11}{subsection.3.6}
-\contentsline {subsection}{\numberline {3.7}Concentration surface and slices}{11}{subsection.3.7}
-\contentsline {section}{\numberline {4}Understanding the program}{14}{section.4}
-\contentsline {subsection}{\numberline {4.1}Filters}{14}{subsection.4.1}
-\contentsline {subsection}{\numberline {4.2}Trees}{14}{subsection.4.2}
-\contentsline {subsection}{\numberline {4.3}Stashes}{15}{subsection.4.3}
-\contentsline {subsection}{\numberline {4.4}Plots}{16}{subsection.4.4}
-\contentsline {subsection}{\numberline {4.5}Cameras}{16}{subsection.4.5}
-\contentsline {subsection}{\numberline {4.6}Effects}{17}{subsection.4.6}
-\contentsline {subsection}{\numberline {4.7}Program actions}{17}{subsection.4.7}
-\contentsline {subsubsection}{\numberline {4.7.1}Save}{17}{subsubsection.4.7.1}
-\contentsline {subsubsection}{\numberline {4.7.2}Undo}{17}{subsubsection.4.7.2}
-\contentsline {subsubsection}{\numberline {4.7.3}Raw Data}{17}{subsubsection.4.7.3}
-\contentsline {subsubsection}{\numberline {4.7.4}Export Menu}{17}{subsubsection.4.7.4}
-\contentsline {subsubsection}{\numberline {4.7.5}Autosave}{18}{subsubsection.4.7.5}
-\contentsline {subsubsection}{\numberline {4.7.6}Export Animation}{18}{subsubsection.4.7.6}
-\contentsline {section}{\numberline {5}Detailed Reference}{22}{section.5}
-\contentsline {subsection}{\numberline {5.1}Data types}{22}{subsection.5.1}
-\contentsline {subsubsection}{\numberline {5.1.1}Ions}{22}{subsubsection.5.1.1}
-\contentsline {subsubsection}{\numberline {5.1.2}Plots}{22}{subsubsection.5.1.2}
-\contentsline {subsubsection}{\numberline {5.1.3}Range}{22}{subsubsection.5.1.3}
-\contentsline {subsubsection}{\numberline {5.1.4}Voxels}{22}{subsubsection.5.1.4}
-\contentsline {subsubsection}{\numberline {5.1.5}Drawables}{22}{subsubsection.5.1.5}
-\contentsline {subsection}{\numberline {5.2}Filters}{22}{subsection.5.2}
-\contentsline {subsubsection}{\numberline {5.2.1}Data load}{23}{subsubsection.5.2.1}
-\contentsline {subsubsection}{\numberline {5.2.2}Downsampling}{24}{subsubsection.5.2.2}
-\contentsline {subsubsection}{\numberline {5.2.3}Ion Information}{24}{subsubsection.5.2.3}
-\contentsline {subsubsection}{\numberline {5.2.4}Ranging}{25}{subsubsection.5.2.4}
-\contentsline {subsubsection}{\numberline {5.2.5}Bounding Box}{26}{subsubsection.5.2.5}
-\contentsline {subsubsection}{\numberline {5.2.6}Clipping}{26}{subsubsection.5.2.6}
-\contentsline {subsubsection}{\numberline {5.2.7}Spectrum}{26}{subsubsection.5.2.7}
-\contentsline {subsubsection}{\numberline {5.2.8}Profile}{27}{subsubsection.5.2.8}
-\contentsline {subsubsection}{\numberline {5.2.9}Spatial Analysis}{27}{subsubsection.5.2.9}
-\contentsline {paragraph}{Algorithms}{27}{section*.3}
-\contentsline {subsubsection}{\numberline {5.2.10}Clustering analysis}{28}{subsubsection.5.2.10}
-\contentsline {subsubsection}{\numberline {5.2.11}External Program}{29}{subsubsection.5.2.11}
-\contentsline {paragraph}{Command syntax: }{29}{section*.4}
-\contentsline {paragraph}{Prior to program execution:}{30}{section*.5}
-\contentsline {paragraph}{After program execution:}{30}{section*.6}
-\contentsline {subsubsection}{\numberline {5.2.12}Annotation}{30}{subsubsection.5.2.12}
-\contentsline {paragraph}{Text}{30}{section*.7}
-\contentsline {paragraph}{Arrow, Arrow with Text}{31}{section*.8}
-\contentsline {paragraph}{Angle Measurement}{31}{section*.9}
-\contentsline {subsubsection}{\numberline {5.2.13}Voxels}{31}{subsubsection.5.2.13}
-\contentsline {subsection}{\numberline {5.3}Ion Colour}{32}{subsection.5.3}
-\contentsline {subsection}{\numberline {5.4}Ion Transform}{33}{subsection.5.4}
-\contentsline {section}{\numberline {6}Attributions}{33}{section.6}
-\contentsline {section}{\numberline {7}Licence}{34}{section.7}
-\contentsline {section}{\numberline {8}Appendices}{34}{section.8}
-\contentsline {subsection}{\numberline {8.1}Paths}{34}{subsection.8.1}
-\contentsline {subsection}{\numberline {8.2}File formats}{34}{subsection.8.2}
-\contentsline {subsubsection}{\numberline {8.2.1}State file}{34}{subsubsection.8.2.1}
-\contentsline {subsubsection}{\numberline {8.2.2}Range files}{35}{subsubsection.8.2.2}
-\contentsline {subsubsection}{\numberline {8.2.3}POS files}{36}{subsubsection.8.2.3}
-\contentsline {subsubsection}{\numberline {8.2.4}Text files}{36}{subsubsection.8.2.4}
-\contentsline {subsection}{\numberline {8.3}External Program Examples}{37}{subsection.8.3}
-\contentsline {subsubsection}{\numberline {8.3.1}Scilab}{37}{subsubsection.8.3.1}
-\contentsline {subsubsection}{\numberline {8.3.2}Python}{41}{subsubsection.8.3.2}
-\contentsline {subsubsection}{\numberline {8.3.3}Bash}{43}{subsubsection.8.3.3}
-\contentsline {subsubsection}{\numberline {8.3.4}C/C++}{45}{subsubsection.8.3.4}
-\contentsline {subsection}{\numberline {8.4}Modifying the program}{49}{subsection.8.4}
-\contentsline {subsubsection}{\numberline {8.4.1}Development tools}{49}{subsubsection.8.4.1}
-\contentsline {subsubsection}{\numberline {8.4.2}Getting yourself set up}{50}{subsubsection.8.4.2}
-\contentsline {subsubsection}{\numberline {8.4.3}Changing stuff}{50}{subsubsection.8.4.3}
diff --git a/docs/samples/externalProg/bash-example.sh b/docs/samples/externalProg/bash-example.sh
old mode 100755
new mode 100644
diff --git a/docs/samples/externalProg/python-example.py b/docs/samples/externalProg/python-example.py
old mode 100755
new mode 100644
diff --git a/install-sh b/install-sh
old mode 100644
new mode 100755
index 0bd91ae..377bb86
--- a/install-sh
+++ b/install-sh
@@ -1 +1,527 @@
-install-sh
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test X"$d" = X && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/m4/freetype2.m4 b/m4/freetype2.m4
old mode 100644
new mode 100755
diff --git a/m4/ftgl.m4 b/m4/ftgl.m4
old mode 100644
new mode 100755
diff --git a/m4/gl.m4 b/m4/gl.m4
old mode 100644
new mode 100755
diff --git a/m4/gsl.m4 b/m4/gsl.m4
old mode 100644
new mode 100755
diff --git a/m4/libxml2.m4 b/m4/libxml2.m4
old mode 100644
new mode 100755
diff --git a/m4/opengl.m4 b/m4/opengl.m4
old mode 100644
new mode 100755
diff --git a/m4/wxwin.m4 b/m4/wxwin.m4
old mode 100644
new mode 100755
diff --git a/missing b/missing
index 1c8ff70..cdea514 100755
--- a/missing
+++ b/missing
@@ -1,11 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2006-05-10.23
+scriptversion=2012-06-26.16; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
-#   Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # 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
@@ -18,9 +17,7 @@ scriptversion=2006-05-10.23
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -28,66 +25,40 @@ scriptversion=2006-05-10.23
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
+case $1 in
 
-msg="missing on your system"
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake at gnu.org>."
     exit $?
@@ -99,269 +70,146 @@ Send bug reports to <bug-automake at gnu.org>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case $1 in
-  lex|yacc)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $1 in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison|yacc)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG="\${$#}"
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex|flex)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG="\${$#}"
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit 1
-    fi
-    ;;
-
-  makeinfo)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-	/^@setfilename/{
-	  s/.* \([^ ]*\) *$/\1/
-	  p
-	  q
-	}' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  tar)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
-    ;;
-esac
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
 
-exit 0
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'automa4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/packaging/3Depict.desktop b/packaging/3Depict.desktop
old mode 100644
new mode 100755
diff --git a/packaging/RPM/3Depict-0.0.14-font-path.patch b/packaging/RPM/3Depict-0.0.15-font-path.patch
similarity index 89%
rename from packaging/RPM/3Depict-0.0.14-font-path.patch
rename to packaging/RPM/3Depict-0.0.15-font-path.patch
index 9bd6c31..3c13891 100644
--- a/packaging/RPM/3Depict-0.0.14-font-path.patch
+++ b/packaging/RPM/3Depict-0.0.15-font-path.patch
@@ -1,6 +1,6 @@
 diff -r 1b997a96b779 src/wxcomponents.cpp
---- src/wxcomponents.cpp	Sat Mar 23 17:50:44 2013 +0000
-+++ src/wxcomponents.cpp	Sat Mar 23 17:56:14 2013 +0000
+--- src/wx/wxcomponents.cpp	Sat Mar 23 17:50:44 2013 +0000
++++ src/wx/wxcomponents.cpp	Sat Mar 23 17:56:14 2013 +0000
 @@ -857,16 +857,17 @@
  	//(Oh look Ma, I'm autoconf!)
  
diff --git a/packaging/RPM/3Depict-0.0.14-manual-pdf-loc.patch b/packaging/RPM/3Depict-0.0.15-manual-pdf-loc.patch
similarity index 100%
rename from packaging/RPM/3Depict-0.0.14-manual-pdf-loc.patch
rename to packaging/RPM/3Depict-0.0.15-manual-pdf-loc.patch
diff --git a/packaging/RPM/3Depict.spec b/packaging/RPM/3Depict.spec
old mode 100644
new mode 100755
index 0b4993b..c2b9b68
--- a/packaging/RPM/3Depict.spec
+++ b/packaging/RPM/3Depict.spec
@@ -1,5 +1,5 @@
 Name:		3Depict
-Version:	0.0.14
+Version:	0.0.15
 Release:	1%{?dist}
 Summary:	Valued 3D point cloud visualization and analysis
 Group:		Applications/Engineering
@@ -109,7 +109,13 @@ rm -rf %{buildroot}
 
 
 %changelog
-* Sat Jul 6 2013 D Haley <mycae(a!t)gmx.com> - 0.0.14-1
+* Fri Nov 15 2013 D Haley <mycae(a!t)gmx.com> - 0.0.15-1
+- Update to 0.0.15
+
+* Fri Aug 02 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.0.14-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Sat Jul 20 2013 D Haley <mycae(a!t)gmx.com> - 0.0.14-1
 - Update to 0.0.14
 
 * Tue Jun 25 2013 D Haley <mycae(a!t)gmx.com> - 0.0.13-2
diff --git a/packaging/debian/3depict.1 b/packaging/debian/3depict.1
old mode 100644
new mode 100755
diff --git a/packaging/debian/3depict.install b/packaging/debian/3depict.install
old mode 100644
new mode 100755
index 4fa9249..4d0595d
--- a/packaging/debian/3depict.install
+++ b/packaging/debian/3depict.install
@@ -1,2 +1,5 @@
 data/textures/*png usr/share/3depict/textures/
 docs/manual-latex/manual.pdf usr/share/3depict/
+data/*dtd usr/share/3depict/
+data/*txt usr/share/3depict/
+data/*xml usr/share/3depict/
diff --git a/packaging/debian/changelog b/packaging/debian/changelog
index c0a216d..cb610f6 100644
--- a/packaging/debian/changelog
+++ b/packaging/debian/changelog
@@ -1,8 +1,14 @@
-3depict (0.0.14-1) UNRELEASED; urgency=low
+3depict (0.0.15-1) unstable; urgency=low
+
+  * Update to 0.0.15
+
+ -- D Haley <mycae at gmx.com>  Fri, 15 Nov 2013 20:42:37 +0100
+
+3depict (0.0.14-1) unstable; urgency=low
 
   * Update to upstream
 
- -- D Haley <mycae at gmx.com>  Sat, 06 Jul 2013 11:13:02 +0200
+ -- D Haley <mycae at gmx.com>  Sat, 20 Jul 2013 18:31:32 +0200
 
 3depict (0.0.13-2) unstable; urgency=low
 
diff --git a/packaging/debian/compat b/packaging/debian/compat
old mode 100644
new mode 100755
diff --git a/packaging/debian/control b/packaging/debian/control
old mode 100644
new mode 100755
index 8f5a643..7133e77
--- a/packaging/debian/control
+++ b/packaging/debian/control
@@ -3,7 +3,7 @@ Section: science
 Priority: optional
 Maintainer: Debian Science Maintainers <debian-science-maintainers at lists.alioth.debian.org>
 Uploaders: D Haley <mycae at gmx.com>
-Build-Depends: debhelper (>= 9), dpkg-dev (>= 1.16.1~), dh-autoreconf, libgl1-mesa-dev | libgl-dev, libpng-dev | libpng15-dev, libqhull-dev, libwxgtk2.8-dev, libftgl-dev, autoconf, libxml2-dev, libmgl-dev (>= 2.1.3.1), autotools-dev 
+Build-Depends: debhelper (>= 9), dpkg-dev (>= 1.16.1~), libgl1-mesa-dev | libgl-dev, libpng-dev | libpng15-dev, libqhull-dev, libwxgtk2.8-dev, libftgl-dev, libxml2-dev, libmgl-dev (>= 2.1.3.1)
 Standards-Version: 3.9.4
 Homepage: http://threedepict.sourceforge.net/index.html
 Vcs-Git: git://git.debian.org/debian-science/packages/3depict.git
diff --git a/packaging/debian/copyright b/packaging/debian/copyright
old mode 100644
new mode 100755
diff --git a/packaging/debian/docs b/packaging/debian/docs
old mode 100644
new mode 100755
diff --git a/packaging/debian/manpages b/packaging/debian/manpages
old mode 100644
new mode 100755
diff --git a/packaging/debian/menu b/packaging/debian/menu
old mode 100644
new mode 100755
diff --git a/packaging/debian/patches/FTGL-lowercase.patch b/packaging/debian/patches/FTGL-lowercase.patch
old mode 100644
new mode 100755
index 2a92db1..b8f079d
--- a/packaging/debian/patches/FTGL-lowercase.patch
+++ b/packaging/debian/patches/FTGL-lowercase.patch
@@ -1,11 +1,11 @@
 Description: Debian uses lowercase lib names.
 Forwarded: not-needed
 Author: D Haley <mycae - gmx - com>
-Index: 3depict-0.0.14/configure
+Index: 3depict-0.0.15/configure
 ===================================================================
---- 3depict-0.0.14.orig/configure	2013-07-06 11:08:16.000000000 +0200
-+++ 3depict-0.0.14/configure	2013-07-06 11:08:28.000000000 +0200
-@@ -5964,7 +5964,7 @@
+--- 3depict-0.0.15.orig/configure	2013-11-15 21:19:07.000000000 +0100
++++ 3depict-0.0.15/configure	2013-11-15 21:19:10.000000000 +0100
+@@ -6121,7 +6121,7 @@
  if test "x$ftgl_prefix" != "x" ; then
  	#use the supplied CFLAGS. assume LIBS
  	FTGL_CFLAGS="-I$ftgl_prefix/include/ -L$ftgl_prefix/lib/"
diff --git a/packaging/debian/patches/debian-desktop-naming.patch b/packaging/debian/patches/debian-desktop-naming.patch
old mode 100644
new mode 100755
index da1906d..fce3ae7
--- a/packaging/debian/patches/debian-desktop-naming.patch
+++ b/packaging/debian/patches/debian-desktop-naming.patch
@@ -2,10 +2,10 @@ Description: Debian packages are lowercase, but upstream uses uppercase
  "D"
 Forwarded: not-needed
 Author: D Haley <mycae - gmx - com>
-Index: 3depict-0.0.8/packaging/3Depict.desktop
+Index: 3depict-0.0.14/packaging/3Depict.desktop
 ===================================================================
---- 3depict-0.0.8.orig/packaging/3Depict.desktop	2011-10-23 16:32:14.000000000 +0100
-+++ 3depict-0.0.8/packaging/3Depict.desktop	2011-10-23 16:32:18.000000000 +0100
+--- 3depict-0.0.14.orig/packaging/3Depict.desktop	2013-03-22 19:31:39.000000000 +0100
++++ 3depict-0.0.14/packaging/3Depict.desktop	2013-07-20 18:36:33.000000000 +0200
 @@ -2,8 +2,8 @@
  Version=1.0
  Type=Application
diff --git a/packaging/debian/patches/lowercase-textdomain.patch b/packaging/debian/patches/lowercase-textdomain.patch
old mode 100644
new mode 100755
index 636eb24..7b59388
--- a/packaging/debian/patches/lowercase-textdomain.patch
+++ b/packaging/debian/patches/lowercase-textdomain.patch
@@ -3,8 +3,8 @@ Forwarded: not-needed
 Author: D Haley <mycae - gmx - com>
 Index: 3depict-0.0.14/src/3Depict.cpp
 ===================================================================
---- 3depict-0.0.14.orig/src/3Depict.cpp	2013-07-06 11:08:20.000000000 +0200
-+++ 3depict-0.0.14/src/3Depict.cpp	2013-07-06 11:08:25.000000000 +0200
+--- 3depict-0.0.14.orig/src/3Depict.cpp	2013-07-20 14:41:45.000000000 +0200
++++ 3depict-0.0.14/src/3Depict.cpp	2013-07-20 18:36:33.000000000 +0200
 @@ -165,7 +165,7 @@
  		else
  		{
diff --git a/packaging/debian/patches/series b/packaging/debian/patches/series
old mode 100644
new mode 100755
diff --git a/packaging/debian/rules b/packaging/debian/rules
index bea47f7..748ab77 100755
--- a/packaging/debian/rules
+++ b/packaging/debian/rules
@@ -38,6 +38,7 @@ override_dh_auto_install:
 	#install icon (both SVG and XPM) into pixmaps
 	install -Dp -m 644 $(CURDIR)/data/3Depict.xpm $(CURDIR)/debian/3depict/usr/share/pixmaps/3depict.xpm
 	install -Dp -m 644 $(CURDIR)/data/textures/tex-source/3Depict-icon.svg $(CURDIR)/debian/3depict/usr/share/pixmaps/3depict.svg
+	install -Dp -m 644 $(CURDIR)/data/manual.pdf $(CURDIR)/debian/3depict/usr/share/3depict/3depict-manual.pdf
 	#---
 	
 	#Install the pre-built locale files that are shipped with the tarball.
diff --git a/packaging/debian/source/format b/packaging/debian/source/format
old mode 100644
new mode 100755
diff --git a/packaging/debian/source/include-binaries b/packaging/debian/source/include-binaries
deleted file mode 100644
index bb32417..0000000
--- a/packaging/debian/source/include-binaries
+++ /dev/null
@@ -1 +0,0 @@
-docs/manual-latex/manual.pdf 
diff --git a/packaging/debian/source/local-options b/packaging/debian/source/local-options
old mode 100644
new mode 100755
diff --git a/packaging/debian/tests/control b/packaging/debian/tests/control
old mode 100644
new mode 100755
diff --git a/packaging/debian/watch b/packaging/debian/watch
old mode 100644
new mode 100755
diff --git a/packaging/deps/getDeps b/packaging/deps/getDeps
index bd45420..438605f 100755
--- a/packaging/deps/getDeps
+++ b/packaging/deps/getDeps
@@ -49,9 +49,9 @@ function setMacDeps {
 	#Dependency ID, URL and name
 	DEPIDS=( 0)
 	DEPNAMES=( mathgl)
-	DEPURLS=( http://sourceforge.net/projects/mathgl/files/mathgl/mathgl%201.11.2/mathgl-1.11.2.tar.gz/download)
-	DEPFILENAMES=( mathgl-1.11.2.tar.gz)
-	DEPMDSUM=( acd33e68911d9506f60d769dce23f95e)
+	DEPURLS=( http://sourceforge.net/projects/mathgl/files/mathgl/mathgl%202.1.3/mathgl-2.1.3.1.tar.gz/download)
+	DEPFILENAMES=( mathgl-2.1.3.1.tar.gz)
+	DEPMDSUM=( 1476ea6fd32938ab221fe169025747ed)
 	
 }
 
@@ -197,7 +197,7 @@ function handleMacDistro()
 
 	# install deps except mathgl
 	echo "installing 3Depict dependencies..."
-	sudo port install wget libpng freetype ftgl wxWidgets-devel dylibbundler qhull gsl  cmake libtool pkgconfig
+	sudo port install wget libpng freetype ftgl wxWidgets-3.0 dylibbundler qhull gsl  cmake libtool pkgconfig
 	if [ $? -ne 0 ] ; then
 		echo "macports was not successful in getting the dependencies"
 		exit 1
@@ -324,7 +324,7 @@ function handleLinuxDistro()
 				exit 1
 			fi
 
-			if [ ! -f ~/rpmbuild/SOURCES ]
+			if [ ! -f ~/rpmbuild/SOURCES ] ; then
 				rpmdev-setuptree
 				if [ $? -ne 0 ] ; then
 					echo "Could not set up rpm development tree ??"
@@ -746,12 +746,17 @@ do
 				PNGLIBS=" CXXFLAGS=-I$PNGDIR/include LDFLAGS=-L$PNGDIR/lib "
 				echo $PNGLIBS
 				pwd
-				patch mgl/mgl_eps.cpp < ../../sources/mgl_eps.patch 
-				patch mgl/mgl_export.cpp < ../../sources/mgl_export.patch 		
+				#patch mgl/mgl_eps.cpp < ../../sources/mgl_eps.patch 
+				#patch mgl/mgl_export.cpp < ../../sources/mgl_export.patch 		
 				#After upgrade to 1.5.13, this patch required. 
-				patch mgl/mgl_data_png.cpp < ../../sources/mgl_data_png.patch 
+				#patch mgl/mgl_data_png.cpp < ../../sources/mgl_data_png.patch 
+				patch src/obj.cpp < ../../patches/macosx/mathgl2/diff-obj.c.patch
+				patch src/prc/writePRC.h < ../../patches/macosx/mathgl2/diff-prc-writePRC.h.patch
 			fi
-			./configure --disable-gsl $PNGLIBS
+			#./configure --disable-gsl $PNGLIBS
+			cmake .
+			cmake .
+
 
 			if [ $? -ne 0 ] ; then
 				echo "Damn. unable to configure. aborting"
@@ -771,6 +776,7 @@ do
 			echo "I want to install ${DEPNAMES[$i]} to the system:"
 			#install
 			sudo make install
+			ldconfig
 			if [ $? -ne 0 ] ; then
 				echo "Mathgl said it failed, but is known to misreport. Continuing in 10 seconds"
 				sleep 10
diff --git a/packaging/deps/patches/macosx/mathgl2/diff-obj.c.patch b/packaging/deps/patches/macosx/mathgl2/diff-obj.c.patch
new file mode 100644
index 0000000..ce6d65c
--- /dev/null
+++ b/packaging/deps/patches/macosx/mathgl2/diff-obj.c.patch
@@ -0,0 +1,13 @@
+--- decompress/mathgl-2.1.3.1/src/obj.cpp	2013-05-08 17:39:36.000000000 +1000
++++ sources/mathgl-2x/src/obj.cpp	2013-11-08 22:20:50.000000000 +1100
+@@ -35,10 +35,6 @@
+ #include <string>
+ #include <vector>
+ #include <deque>
+-#include <list>
+-#ifdef __GNUC__
+-#include <ext/slist>
+-#endif
+ #include <map>
+ #include <iostream>
+ 
diff --git a/packaging/deps/patches/macosx/mathgl2/diff-prc-writePRC.h.patch b/packaging/deps/patches/macosx/mathgl2/diff-prc-writePRC.h.patch
new file mode 100644
index 0000000..447a323
--- /dev/null
+++ b/packaging/deps/patches/macosx/mathgl2/diff-prc-writePRC.h.patch
@@ -0,0 +1,24 @@
+--- decompress/mathgl-2.1.3.1/src/prc/writePRC.h	2013-05-08 17:39:33.000000000 +1000
++++ sources/mathgl-2x/src/prc/writePRC.h	2013-11-08 22:20:46.000000000 +1100
+@@ -24,9 +24,6 @@
+ #include <vector>
+ #include <deque>
+ #include <list>
+-#ifdef __GNUC__
+-#include <ext/slist>
+-#endif
+ #include <map>
+ #include <iostream>
+ #include <algorithm>
+@@ -224,11 +221,7 @@
+   void addKey(const PRCSingleAttribute &key) { attribute_keys.push_back(key); }
+   std::deque<PRCSingleAttribute> attribute_keys;
+ };
+-#ifdef __GNUC__
+-typedef __gnu_cxx::slist<PRCAttribute> PRCAttributeList;
+-#else
+ typedef std::list<PRCAttribute> PRCAttributeList;
+-#endif
+ 
+ class PRCAttributes
+ {
diff --git a/packaging/deps/sources/mgl_data_png.patch b/packaging/deps/sources/mgl_data_png.patch
old mode 100644
new mode 100755
diff --git a/packaging/deps/sources/mgl_eps.patch b/packaging/deps/sources/mgl_eps.patch
old mode 100644
new mode 100755
diff --git a/packaging/deps/sources/mgl_export.patch b/packaging/deps/sources/mgl_export.patch
old mode 100644
new mode 100755
diff --git a/packaging/mac/3Depict.app/Contents/Info.plist b/packaging/mac/3Depict.app/Contents/Info.plist
old mode 100644
new mode 100755
index 7695412..8b11627
--- a/packaging/mac/3Depict.app/Contents/Info.plist
+++ b/packaging/mac/3Depict.app/Contents/Info.plist
@@ -3,15 +3,13 @@
 <plist version="1.0">
 <dict>
 	<key>BuildMachineOSBuild</key>
-	<string>11A511a</string>
+	<string>13A603</string>
 	<key>CFBundleDevelopmentRegion</key>
 	<string>en</string>
-	<key>CFBundleDocumentTypes</key>
-	<array/>
 	<key>CFBundleExecutable</key>
 	<string>3Depict</string>
 	<key>CFBundleIconFile</key>
-	<string>3Depict-icon.icns</string>
+	<string>3Depict-icon</string>
 	<key>CFBundleIdentifier</key>
 	<string>net.sourceforge.threedepict.3Depict</string>
 	<key>CFBundleInfoDictionaryVersion</key>
@@ -24,28 +22,26 @@
 	<string>BUNDLE_VERSION</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
-	<key>CFBundleURLTypes</key>
-	<array/>
 	<key>CFBundleVersion</key>
 	<string>BUNDLE_VERSION</string>
 	<key>DTCompiler</key>
-	<string></string>
+	<string>com.apple.compilers.llvm.clang.1_0</string>
 	<key>DTPlatformBuild</key>
-	<string>4B110</string>
+	<string>5A3005</string>
 	<key>DTPlatformVersion</key>
 	<string>GM</string>
 	<key>DTSDKBuild</key>
-	<string>11A511a</string>
+	<string>13A595</string>
 	<key>DTSDKName</key>
-	<string>macosx10.7</string>
+	<string>macosxMAC_OS_VER</string>
 	<key>DTXcode</key>
-	<string>0410</string>
+	<string>0502</string>
 	<key>DTXcodeBuild</key>
-	<string>4B110</string>
+	<string>5A3005</string>
 	<key>LSMinimumSystemVersion</key>
-	<string>10.7</string>
+	<string>MAC_OS_VER</string>
 	<key>NSHumanReadableCopyright</key>
-	<string>3Depict  Copyright (C) 2011  3Depict team
+	<string>3Depict Copyright (C) 2013  3Depict team
 This program comes with ABSOLUTELY NO WARRANTY
 This is free software, and you are welcome to redistribute it
 under certain conditions</string>
@@ -53,11 +49,5 @@ under certain conditions</string>
 	<string>MainMenu</string>
 	<key>NSPrincipalClass</key>
 	<string>NSApplication</string>
-	<key>NSServices</key>
-	<array/>
-	<key>UTExportedTypeDeclarations</key>
-	<array/>
-	<key>UTImportedTypeDeclarations</key>
-	<array/>
 </dict>
 </plist>
diff --git a/packaging/mac/3Depict.app/Contents/PkgInfo b/packaging/mac/3Depict.app/Contents/PkgInfo
old mode 100644
new mode 100755
diff --git a/packaging/mac/3Depict.app/Contents/Resources/wxmac.icns b/packaging/mac/3Depict.app/Contents/Resources/wxmac.icns
old mode 100644
new mode 100755
diff --git a/packaging/mac/3Depict.xcodeproj/project.pbxproj b/packaging/mac/3Depict.xcodeproj/project.pbxproj
deleted file mode 100644
index 8d5ce1d..0000000
--- a/packaging/mac/3Depict.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,852 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		9520659413FA968000149A0D /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9520659313FA968000149A0D /* SenTestingKit.framework */; };
-		9520659513FA968000149A0D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9520657513FA968000149A0D /* Cocoa.framework */; };
-		9520659D13FA968000149A0D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9520659B13FA968000149A0D /* InfoPlist.strings */; };
-		9520659F13FA968000149A0D /* _DepictTests.h in Resources */ = {isa = PBXBuildFile; fileRef = 9520659E13FA968000149A0D /* _DepictTests.h */; };
-		952065A113FA968000149A0D /* _DepictTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 952065A013FA968000149A0D /* _DepictTests.m */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		9520659613FA968000149A0D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 9520656813FA968000149A0D /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9520657013FA968000149A0D;
-			remoteInfo = 3Depict;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
-		9520657113FA968000149A0D /* 3Depict.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = 3Depict.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		9520657513FA968000149A0D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
-		9520657813FA968000149A0D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
-		9520657913FA968000149A0D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
-		9520657A13FA968000149A0D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
-		9520657D13FA968000149A0D /* 3Depict-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "3Depict-Info.plist"; sourceTree = "<group>"; };
-		9520657F13FA968000149A0D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		9520658113FA968000149A0D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-		9520658313FA968000149A0D /* 3Depict-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "3Depict-Prefix.pch"; sourceTree = "<group>"; };
-		9520658513FA968000149A0D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; };
-		9520658B13FA968000149A0D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
-		9520659213FA968000149A0D /* 3DepictTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = 3DepictTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
-		9520659313FA968000149A0D /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
-		9520659A13FA968000149A0D /* 3DepictTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "3DepictTests-Info.plist"; sourceTree = "<group>"; };
-		9520659C13FA968000149A0D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		9520659E13FA968000149A0D /* _DepictTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _DepictTests.h; sourceTree = "<group>"; };
-		952065A013FA968000149A0D /* _DepictTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = _DepictTests.m; sourceTree = "<group>"; };
-		952065AA13FA978100149A0D /* 3Depict.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = 3Depict.cpp; path = ../../src/3Depict.cpp; sourceTree = "<group>"; };
-		952065AC13FA978100149A0D /* 3Depict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = 3Depict.h; path = ../../src/3Depict.h; sourceTree = "<group>"; };
-		952065AD13FA978100149A0D /* 3Depict.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = 3Depict.rc; path = ../../src/3Depict.rc; sourceTree = "<group>"; };
-		952065AE13FA978100149A0D /* 3Depict.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = 3Depict.xpm; path = ../../src/3Depict.xpm; sourceTree = "<group>"; };
-		952065AF13FA978100149A0D /* APTClasses.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = APTClasses.cpp; path = ../../src/APTClasses.cpp; sourceTree = "<group>"; };
-		952065B013FA978100149A0D /* APTClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = APTClasses.h; path = ../../src/APTClasses.h; sourceTree = "<group>"; };
-		952065B113FA978100149A0D /* art.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = art.h; path = ../../src/art.h; sourceTree = "<group>"; };
-		952065B213FA978100149A0D /* assertion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = assertion.h; path = ../../src/assertion.h; sourceTree = "<group>"; };
-		952065B313FA978100149A0D /* basics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = basics.cpp; path = ../../src/basics.cpp; sourceTree = "<group>"; };
-		952065B413FA978100149A0D /* basics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = basics.h; path = ../../src/basics.h; sourceTree = "<group>"; };
-		952065B513FA978100149A0D /* cameras.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cameras.cpp; path = ../../src/cameras.cpp; sourceTree = "<group>"; };
-		952065B613FA978100149A0D /* cameras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cameras.h; path = ../../src/cameras.h; sourceTree = "<group>"; };
-		952065B713FA978100149A0D /* colourmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = colourmap.cpp; path = ../../src/colourmap.cpp; sourceTree = "<group>"; };
-		952065B813FA978100149A0D /* colourmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = colourmap.h; path = ../../src/colourmap.h; sourceTree = "<group>"; };
-		952065B913FA978100149A0D /* commonConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = commonConstants.h; path = ../../src/commonConstants.h; sourceTree = "<group>"; };
-		952065BA13FA978100149A0D /* configFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = configFile.cpp; path = ../../src/configFile.cpp; sourceTree = "<group>"; };
-		952065BB13FA978100149A0D /* configFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configFile.h; path = ../../src/configFile.h; sourceTree = "<group>"; };
-		952065BC13FA978100149A0D /* cropPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cropPanel.cpp; path = ../../src/cropPanel.cpp; sourceTree = "<group>"; };
-		952065BD13FA978100149A0D /* cropPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cropPanel.h; path = ../../src/cropPanel.h; sourceTree = "<group>"; };
-		952065BE13FA978100149A0D /* drawables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = drawables.cpp; path = ../../src/drawables.cpp; sourceTree = "<group>"; };
-		952065BF13FA978100149A0D /* drawables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = drawables.h; path = ../../src/drawables.h; sourceTree = "<group>"; };
-		952065C013FA978100149A0D /* effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = effect.cpp; path = ../../src/effect.cpp; sourceTree = "<group>"; };
-		952065C113FA978100149A0D /* effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = effect.h; path = ../../src/effect.h; sourceTree = "<group>"; };
-		952065C213FA978100149A0D /* endianTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = endianTest.h; path = ../../src/endianTest.h; sourceTree = "<group>"; };
-		952065C313FA978100149A0D /* ExportPos.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExportPos.cpp; path = ../../src/ExportPos.cpp; sourceTree = "<group>"; };
-		952065C413FA978100149A0D /* ExportPos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExportPos.h; path = ../../src/ExportPos.h; sourceTree = "<group>"; };
-		952065C513FA978100149A0D /* ExportRngDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExportRngDialog.cpp; path = ../../src/ExportRngDialog.cpp; sourceTree = "<group>"; };
-		952065C613FA978100149A0D /* ExportRngDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExportRngDialog.h; path = ../../src/ExportRngDialog.h; sourceTree = "<group>"; };
-		952065C713FA978100149A0D /* filter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filter.cpp; path = ../../src/filter.cpp; sourceTree = "<group>"; };
-		952065C813FA978100149A0D /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filter.h; path = ../../src/filter.h; sourceTree = "<group>"; };
-		952065CA13FA978100149A0D /* allFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = allFilter.cpp; sourceTree = "<group>"; };
-		952065CB13FA978100149A0D /* allFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = allFilter.h; sourceTree = "<group>"; };
-		952065CD13FA978100149A0D /* annotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = annotation.h; sourceTree = "<group>"; };
-		952065CE13FA978100149A0D /* boundingBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boundingBox.cpp; sourceTree = "<group>"; };
-		952065CF13FA978100149A0D /* boundingBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = boundingBox.h; sourceTree = "<group>"; };
-		952065D013FA978100149A0D /* clusterAnalysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clusterAnalysis.cpp; sourceTree = "<group>"; };
-		952065D113FA978100149A0D /* clusterAnalysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = clusterAnalysis.h; sourceTree = "<group>"; };
-		952065D213FA978100149A0D /* compositionProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = compositionProfile.cpp; sourceTree = "<group>"; };
-		952065D313FA978100149A0D /* compositionProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compositionProfile.h; sourceTree = "<group>"; };
-		952065D413FA978100149A0D /* externalProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = externalProgram.cpp; sourceTree = "<group>"; };
-		952065D513FA978100149A0D /* externalProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = externalProgram.h; sourceTree = "<group>"; };
-		952065D613FA978100149A0D /* ionClip.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ionClip.cpp; sourceTree = "<group>"; };
-		952065D713FA978100149A0D /* ionClip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ionClip.h; sourceTree = "<group>"; };
-		952065D813FA978100149A0D /* ionColour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ionColour.cpp; sourceTree = "<group>"; };
-		952065D913FA978100149A0D /* ionColour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ionColour.h; sourceTree = "<group>"; };
-		952065DA13FA978100149A0D /* ionDownsample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ionDownsample.cpp; sourceTree = "<group>"; };
-		952065DB13FA978100149A0D /* ionDownsample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ionDownsample.h; sourceTree = "<group>"; };
-		952065DC13FA978100149A0D /* ionInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ionInfo.cpp; sourceTree = "<group>"; };
-		952065DD13FA978100149A0D /* ionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ionInfo.h; sourceTree = "<group>"; };
-		952065DE13FA978100149A0D /* posLoad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = posLoad.cpp; sourceTree = "<group>"; };
-		952065DF13FA978100149A0D /* posLoad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = posLoad.h; sourceTree = "<group>"; };
-		952065E013FA978100149A0D /* rangeFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rangeFile.cpp; sourceTree = "<group>"; };
-		952065E113FA978100149A0D /* rangeFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rangeFile.h; sourceTree = "<group>"; };
-		952065E213FA978100149A0D /* spatialAnalysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spatialAnalysis.cpp; sourceTree = "<group>"; };
-		952065E313FA978100149A0D /* spatialAnalysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spatialAnalysis.h; sourceTree = "<group>"; };
-		952065E413FA978100149A0D /* spectrumPlot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spectrumPlot.cpp; sourceTree = "<group>"; };
-		952065E513FA978100149A0D /* spectrumPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spectrumPlot.h; sourceTree = "<group>"; };
-		952065E613FA978100149A0D /* transform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transform.cpp; sourceTree = "<group>"; };
-		952065E713FA978100149A0D /* transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transform.h; sourceTree = "<group>"; };
-		952065E813FA978100149A0D /* voxelise.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = voxelise.cpp; sourceTree = "<group>"; };
-		952065E913FA978100149A0D /* voxelise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = voxelise.h; sourceTree = "<group>"; };
-		952065EB13FA978100149A0D /* preferencesDialog.wxg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = preferencesDialog.wxg; sourceTree = "<group>"; };
-		952065EC13FA978100149A0D /* skeleton-part2.wxg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "skeleton-part2.wxg"; sourceTree = "<group>"; };
-		952065ED13FA978100149A0D /* skeleton.wxg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = skeleton.wxg; sourceTree = "<group>"; };
-		952065EE13FA978100149A0D /* glPane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glPane.cpp; path = ../../src/glPane.cpp; sourceTree = "<group>"; };
-		952065EF13FA978100149A0D /* glPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glPane.h; path = ../../src/glPane.h; sourceTree = "<group>"; };
-		952065F013FA978100149A0D /* isoSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = isoSurface.cpp; path = ../../src/isoSurface.cpp; sourceTree = "<group>"; };
-		952065F113FA978100149A0D /* isoSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = isoSurface.h; path = ../../src/isoSurface.h; sourceTree = "<group>"; };
-		952065F213FA978100149A0D /* K3DTree-mk2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "K3DTree-mk2.cpp"; path = "../../src/K3DTree-mk2.cpp"; sourceTree = "<group>"; };
-		952065F313FA978100149A0D /* K3DTree-mk2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "K3DTree-mk2.h"; path = "../../src/K3DTree-mk2.h"; sourceTree = "<group>"; };
-		952065F413FA978100149A0D /* K3DTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = K3DTree.cpp; path = ../../src/K3DTree.cpp; sourceTree = "<group>"; };
-		952065F513FA978100149A0D /* K3DTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = K3DTree.h; path = ../../src/K3DTree.h; sourceTree = "<group>"; };
-		952065F613FA978100149A0D /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = ../../src/Makefile; sourceTree = "<group>"; };
-		952065F713FA978100149A0D /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Makefile.am; path = ../../src/Makefile.am; sourceTree = "<group>"; };
-		952065F813FA978100149A0D /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Makefile.in; path = ../../src/Makefile.in; sourceTree = "<group>"; };
-		952065F913FA978100149A0D /* mathfuncs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mathfuncs.cpp; path = ../../src/mathfuncs.cpp; sourceTree = "<group>"; };
-		952065FA13FA978100149A0D /* mathfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mathfuncs.h; path = ../../src/mathfuncs.h; sourceTree = "<group>"; };
-		952065FB13FA978100149A0D /* mathglPane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mathglPane.cpp; path = ../../src/mathglPane.cpp; sourceTree = "<group>"; };
-		952065FC13FA978100149A0D /* mathglPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mathglPane.h; path = ../../src/mathglPane.h; sourceTree = "<group>"; };
-		952065FD13FA978100149A0D /* myAppIcon.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; name = myAppIcon.ico; path = ../../src/myAppIcon.ico; sourceTree = "<group>"; };
-		952065FE13FA978100149A0D /* plot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plot.cpp; path = ../../src/plot.cpp; sourceTree = "<group>"; };
-		952065FF13FA978100149A0D /* plot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plot.h; path = ../../src/plot.h; sourceTree = "<group>"; };
-		9520660013FA978100149A0D /* pngread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngread.c; path = ../../src/pngread.c; sourceTree = "<group>"; };
-		9520660113FA978100149A0D /* pngread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngread.h; path = ../../src/pngread.h; sourceTree = "<group>"; };
-		9520660213FA978100149A0D /* prefDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = prefDialog.cpp; path = ../../src/prefDialog.cpp; sourceTree = "<group>"; };
-		9520660313FA978100149A0D /* prefDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prefDialog.h; path = ../../src/prefDialog.h; sourceTree = "<group>"; };
-		9520660413FA978100149A0D /* rdf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rdf.cpp; path = ../../src/rdf.cpp; sourceTree = "<group>"; };
-		9520660513FA978100149A0D /* rdf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rdf.h; path = ../../src/rdf.h; sourceTree = "<group>"; };
-		9520660613FA978100149A0D /* resDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = resDialog.cpp; path = ../../src/resDialog.cpp; sourceTree = "<group>"; };
-		9520660713FA978100149A0D /* resDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resDialog.h; path = ../../src/resDialog.h; sourceTree = "<group>"; };
-		9520660813FA978100149A0D /* scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scene.cpp; path = ../../src/scene.cpp; sourceTree = "<group>"; };
-		9520660913FA978100149A0D /* scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = scene.h; path = ../../src/scene.h; sourceTree = "<group>"; };
-		9520660A13FA978100149A0D /* select.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = select.cpp; path = ../../src/select.cpp; sourceTree = "<group>"; };
-		9520660B13FA978100149A0D /* select.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = select.h; path = ../../src/select.h; sourceTree = "<group>"; };
-		9520660C13FA978100149A0D /* StashDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StashDialog.cpp; path = ../../src/StashDialog.cpp; sourceTree = "<group>"; };
-		9520660D13FA978100149A0D /* StashDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StashDialog.h; path = ../../src/StashDialog.h; sourceTree = "<group>"; };
-		9520660F13FA978100149A0D /* 3Depict-icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "3Depict-icon.icns"; sourceTree = "<group>"; };
-		9520661013FA978100149A0D /* 3Depict-icon.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "3Depict-icon.svg"; sourceTree = "<group>"; };
-		9520661113FA978100149A0D /* enlarge.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = enlarge.svg; sourceTree = "<group>"; };
-		9520661213FA978100149A0D /* Icons-licence.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Icons-licence.txt"; sourceTree = "<group>"; };
-		9520661313FA978100149A0D /* keyboard-alt.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "keyboard-alt.svg"; sourceTree = "<group>"; };
-		9520661413FA978100149A0D /* keyboard-command.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "keyboard-command.svg"; sourceTree = "<group>"; };
-		9520661513FA978100149A0D /* keyboard-ctrl.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "keyboard-ctrl.svg"; sourceTree = "<group>"; };
-		9520661613FA978100149A0D /* keyboard-shift.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "keyboard-shift.svg"; sourceTree = "<group>"; };
-		9520661713FA978100149A0D /* keyboard-tab.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "keyboard-tab.svg"; sourceTree = "<group>"; };
-		9520661813FA978100149A0D /* Left-Right-arrow.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Left-Right-arrow.svg"; sourceTree = "<group>"; };
-		9520661913FA978100149A0D /* Left_clicked_mouse.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Left_clicked_mouse.svg; sourceTree = "<group>"; };
-		9520661A13FA978100149A0D /* middle_clicked_mouse.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = middle_clicked_mouse.svg; sourceTree = "<group>"; };
-		9520661B13FA978100149A0D /* Right-arrow.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Right-arrow.svg"; sourceTree = "<group>"; };
-		9520661C13FA978100149A0D /* Right_clicked_mouse.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Right_clicked_mouse.svg; sourceTree = "<group>"; };
-		9520661D13FA978100149A0D /* rotateArrow.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = rotateArrow.svg; sourceTree = "<group>"; };
-		9520661E13FA978100149A0D /* scroll_wheel_mouse.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = scroll_wheel_mouse.svg; sourceTree = "<group>"; };
-		9520662013FA978100149A0D /* enlarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = enlarge.png; sourceTree = "<group>"; };
-		9520662113FA978100149A0D /* keyboard-alt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-alt.png"; sourceTree = "<group>"; };
-		9520662213FA978100149A0D /* keyboard-command.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-command.png"; sourceTree = "<group>"; };
-		9520662313FA978100149A0D /* keyboard-ctrl.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-ctrl.png"; sourceTree = "<group>"; };
-		9520662413FA978100149A0D /* keyboard-shift.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-shift.png"; sourceTree = "<group>"; };
-		9520662513FA978100149A0D /* keyboard-tab.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-tab.png"; sourceTree = "<group>"; };
-		9520662613FA978100149A0D /* Left-Right-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Left-Right-arrow.png"; sourceTree = "<group>"; };
-		9520662713FA978100149A0D /* Left_clicked_mouse.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Left_clicked_mouse.png; sourceTree = "<group>"; };
-		9520662813FA978100149A0D /* middle_clicked_mouse.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = middle_clicked_mouse.png; sourceTree = "<group>"; };
-		9520662913FA978100149A0D /* Right-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Right-arrow.png"; sourceTree = "<group>"; };
-		9520662A13FA978100149A0D /* Right_clicked_mouse.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Right_clicked_mouse.png; sourceTree = "<group>"; };
-		9520662B13FA978100149A0D /* rotateArrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = rotateArrow.png; sourceTree = "<group>"; };
-		9520662C13FA978100149A0D /* scroll_wheel_mouse.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = scroll_wheel_mouse.png; sourceTree = "<group>"; };
-		9520662D13FA978100149A0D /* textures.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = textures.cpp; path = ../../src/textures.cpp; sourceTree = "<group>"; };
-		9520662E13FA978100149A0D /* textures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = textures.h; path = ../../src/textures.h; sourceTree = "<group>"; };
-		9520662F13FA978100149A0D /* translation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = translation.h; path = ../../src/translation.h; sourceTree = "<group>"; };
-		9520663013FA978100149A0D /* tree.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tree.hh; path = ../../src/tree.hh; sourceTree = "<group>"; };
-		9520663113FA978100149A0D /* viscontrol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = viscontrol.cpp; path = ../../src/viscontrol.cpp; sourceTree = "<group>"; };
-		9520663213FA978100149A0D /* viscontrol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = viscontrol.h; path = ../../src/viscontrol.h; sourceTree = "<group>"; };
-		9520663313FA978100149A0D /* voxels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = voxels.h; path = ../../src/voxels.h; sourceTree = "<group>"; };
-		9520663513FA978100149A0D /* winconsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = winconsole.h; path = ../../src/winconsole.h; sourceTree = "<group>"; };
-		9520663613FA978100149A0D /* wxcommon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = wxcommon.cpp; path = ../../src/wxcommon.cpp; sourceTree = "<group>"; };
-		9520663713FA978100149A0D /* wxcommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wxcommon.h; path = ../../src/wxcommon.h; sourceTree = "<group>"; };
-		9520663813FA978100149A0D /* wxcomponents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = wxcomponents.cpp; path = ../../src/wxcomponents.cpp; sourceTree = "<group>"; };
-		9520663913FA978100149A0D /* wxcomponents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wxcomponents.h; path = ../../src/wxcomponents.h; sourceTree = "<group>"; };
-		9520663A13FA978100149A0D /* xmlHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xmlHelper.cpp; path = ../../src/xmlHelper.cpp; sourceTree = "<group>"; };
-		9520663B13FA978100149A0D /* xmlHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xmlHelper.h; path = ../../src/xmlHelper.h; sourceTree = "<group>"; };
-		954343C31400816E00606832 /* annotation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = annotation.cpp; path = ../../src/filters/annotation.cpp; sourceTree = "<group>"; };
-		95FB7B4613FB6592007CD6A0 /* textures */ = {isa = PBXFileReference; lastKnownFileType = folder; name = textures; path = ../src/textures; sourceTree = "<group>"; };
-		95FB7B4813FB65B7007CD6A0 /* libftgl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libftgl.dylib; path = usr/local/lib/libftgl.dylib; sourceTree = SDKROOT; };
-		95FB7B4A13FB65E2007CD6A0 /* libintl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libintl.dylib; path = usr/local/lib/libintl.dylib; sourceTree = SDKROOT; };
-		95FB7B4C13FB6D1E007CD6A0 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
-		95FB7B4E13FB6D2B007CD6A0 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
-		95FB7B5013FB6D3C007CD6A0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
-		95FB7B5213FB6D4F007CD6A0 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
-		95FB7B5413FB6D80007CD6A0 /* libSystem.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libSystem.dylib; path = usr/lib/libSystem.dylib; sourceTree = SDKROOT; };
-		95FB7B5613FB6D8B007CD6A0 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
-		95FB7B5813FB6D98007CD6A0 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = System/Library/Frameworks/QuickTime.framework; sourceTree = SDKROOT; };
-		95FB7B5A13FB6E00007CD6A0 /* libmgl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmgl.dylib; path = usr/local/lib/libmgl.dylib; sourceTree = SDKROOT; };
-		95FB7B5C13FB6E1B007CD6A0 /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfreetype.dylib; path = usr/local/lib/libfreetype.dylib; sourceTree = SDKROOT; };
-		95FB7B5E13FB6E2E007CD6A0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
-		95FB7B6013FB6E3D007CD6A0 /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = usr/lib/libbz2.dylib; sourceTree = SDKROOT; };
-		95FB7B6213FB6E59007CD6A0 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
-		95FB7B6413FB6E67007CD6A0 /* libpthread.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpthread.dylib; path = usr/lib/libpthread.dylib; sourceTree = SDKROOT; };
-		95FB7B6613FB6E71007CD6A0 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
-		95FB7B6813FB6E85007CD6A0 /* libm.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libm.dylib; path = usr/lib/libm.dylib; sourceTree = SDKROOT; };
-		95FB7B6A13FB6E8D007CD6A0 /* libgsl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgsl.dylib; path = usr/local/lib/libgsl.dylib; sourceTree = SDKROOT; };
-		95FB7B6C13FB6E99007CD6A0 /* libqhull.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libqhull.dylib; path = usr/local/lib/libqhull.dylib; sourceTree = SDKROOT; };
-		95FB7B6E13FB6EA5007CD6A0 /* libpng.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpng.dylib; path = usr/local/lib/libpng.dylib; sourceTree = SDKROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		9520658E13FA968000149A0D /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				9520659413FA968000149A0D /* SenTestingKit.framework in Frameworks */,
-				9520659513FA968000149A0D /* Cocoa.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		9520656613FA968000149A0D = {
-			isa = PBXGroup;
-			children = (
-				95FB7B7013FB7272007CD6A0 /* libs */,
-				95FB7B4613FB6592007CD6A0 /* textures */,
-				9520657B13FA968000149A0D /* 3Depict */,
-				9520659813FA968000149A0D /* 3DepictTests */,
-				9520657413FA968000149A0D /* Frameworks */,
-				9520657213FA968000149A0D /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		9520657213FA968000149A0D /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				9520657113FA968000149A0D /* 3Depict.app */,
-				9520659213FA968000149A0D /* 3DepictTests.octest */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		9520657413FA968000149A0D /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				9520657513FA968000149A0D /* Cocoa.framework */,
-				9520659313FA968000149A0D /* SenTestingKit.framework */,
-				9520657713FA968000149A0D /* Other Frameworks */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		9520657713FA968000149A0D /* Other Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				9520657813FA968000149A0D /* AppKit.framework */,
-				9520657913FA968000149A0D /* CoreData.framework */,
-				9520657A13FA968000149A0D /* Foundation.framework */,
-			);
-			name = "Other Frameworks";
-			sourceTree = "<group>";
-		};
-		9520657B13FA968000149A0D /* 3Depict */ = {
-			isa = PBXGroup;
-			children = (
-				954343C31400816E00606832 /* annotation.cpp */,
-				952065AA13FA978100149A0D /* 3Depict.cpp */,
-				952065AC13FA978100149A0D /* 3Depict.h */,
-				952065AD13FA978100149A0D /* 3Depict.rc */,
-				952065AE13FA978100149A0D /* 3Depict.xpm */,
-				952065AF13FA978100149A0D /* APTClasses.cpp */,
-				952065B013FA978100149A0D /* APTClasses.h */,
-				952065B113FA978100149A0D /* art.h */,
-				952065B213FA978100149A0D /* assertion.h */,
-				952065B313FA978100149A0D /* basics.cpp */,
-				952065B413FA978100149A0D /* basics.h */,
-				952065B513FA978100149A0D /* cameras.cpp */,
-				952065B613FA978100149A0D /* cameras.h */,
-				952065B713FA978100149A0D /* colourmap.cpp */,
-				952065B813FA978100149A0D /* colourmap.h */,
-				952065B913FA978100149A0D /* commonConstants.h */,
-				952065BA13FA978100149A0D /* configFile.cpp */,
-				952065BB13FA978100149A0D /* configFile.h */,
-				952065BC13FA978100149A0D /* cropPanel.cpp */,
-				952065BD13FA978100149A0D /* cropPanel.h */,
-				952065BE13FA978100149A0D /* drawables.cpp */,
-				952065BF13FA978100149A0D /* drawables.h */,
-				952065C013FA978100149A0D /* effect.cpp */,
-				952065C113FA978100149A0D /* effect.h */,
-				952065C213FA978100149A0D /* endianTest.h */,
-				952065C313FA978100149A0D /* ExportPos.cpp */,
-				952065C413FA978100149A0D /* ExportPos.h */,
-				952065C513FA978100149A0D /* ExportRngDialog.cpp */,
-				952065C613FA978100149A0D /* ExportRngDialog.h */,
-				952065C713FA978100149A0D /* filter.cpp */,
-				952065C813FA978100149A0D /* filter.h */,
-				952065C913FA978100149A0D /* filters */,
-				952065EA13FA978100149A0D /* glade-skeleton */,
-				952065EE13FA978100149A0D /* glPane.cpp */,
-				952065EF13FA978100149A0D /* glPane.h */,
-				952065F013FA978100149A0D /* isoSurface.cpp */,
-				952065F113FA978100149A0D /* isoSurface.h */,
-				952065F213FA978100149A0D /* K3DTree-mk2.cpp */,
-				952065F313FA978100149A0D /* K3DTree-mk2.h */,
-				952065F413FA978100149A0D /* K3DTree.cpp */,
-				952065F513FA978100149A0D /* K3DTree.h */,
-				952065F613FA978100149A0D /* Makefile */,
-				952065F713FA978100149A0D /* Makefile.am */,
-				952065F813FA978100149A0D /* Makefile.in */,
-				952065F913FA978100149A0D /* mathfuncs.cpp */,
-				952065FA13FA978100149A0D /* mathfuncs.h */,
-				952065FB13FA978100149A0D /* mathglPane.cpp */,
-				952065FC13FA978100149A0D /* mathglPane.h */,
-				952065FD13FA978100149A0D /* myAppIcon.ico */,
-				952065FE13FA978100149A0D /* plot.cpp */,
-				952065FF13FA978100149A0D /* plot.h */,
-				9520660013FA978100149A0D /* pngread.c */,
-				9520660113FA978100149A0D /* pngread.h */,
-				9520660213FA978100149A0D /* prefDialog.cpp */,
-				9520660313FA978100149A0D /* prefDialog.h */,
-				9520660413FA978100149A0D /* rdf.cpp */,
-				9520660513FA978100149A0D /* rdf.h */,
-				9520660613FA978100149A0D /* resDialog.cpp */,
-				9520660713FA978100149A0D /* resDialog.h */,
-				9520660813FA978100149A0D /* scene.cpp */,
-				9520660913FA978100149A0D /* scene.h */,
-				9520660A13FA978100149A0D /* select.cpp */,
-				9520660B13FA978100149A0D /* select.h */,
-				9520660C13FA978100149A0D /* StashDialog.cpp */,
-				9520660D13FA978100149A0D /* StashDialog.h */,
-				9520660E13FA978100149A0D /* tex-source */,
-				9520661F13FA978100149A0D /* textures */,
-				9520662D13FA978100149A0D /* textures.cpp */,
-				9520662E13FA978100149A0D /* textures.h */,
-				9520662F13FA978100149A0D /* translation.h */,
-				9520663013FA978100149A0D /* tree.hh */,
-				9520663113FA978100149A0D /* viscontrol.cpp */,
-				9520663213FA978100149A0D /* viscontrol.h */,
-				9520663313FA978100149A0D /* voxels.h */,
-				9520663513FA978100149A0D /* winconsole.h */,
-				9520663613FA978100149A0D /* wxcommon.cpp */,
-				9520663713FA978100149A0D /* wxcommon.h */,
-				9520663813FA978100149A0D /* wxcomponents.cpp */,
-				9520663913FA978100149A0D /* wxcomponents.h */,
-				9520663A13FA978100149A0D /* xmlHelper.cpp */,
-				9520663B13FA978100149A0D /* xmlHelper.h */,
-				9520658A13FA968000149A0D /* MainMenu.xib */,
-				9520657C13FA968000149A0D /* Supporting Files */,
-			);
-			path = 3Depict;
-			sourceTree = "<group>";
-		};
-		9520657C13FA968000149A0D /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				9520657D13FA968000149A0D /* 3Depict-Info.plist */,
-				9520657E13FA968000149A0D /* InfoPlist.strings */,
-				9520658113FA968000149A0D /* main.m */,
-				9520658313FA968000149A0D /* 3Depict-Prefix.pch */,
-				9520658413FA968000149A0D /* Credits.rtf */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		9520659813FA968000149A0D /* 3DepictTests */ = {
-			isa = PBXGroup;
-			children = (
-				9520659E13FA968000149A0D /* _DepictTests.h */,
-				952065A013FA968000149A0D /* _DepictTests.m */,
-				9520659913FA968000149A0D /* Supporting Files */,
-			);
-			path = 3DepictTests;
-			sourceTree = "<group>";
-		};
-		9520659913FA968000149A0D /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				9520659A13FA968000149A0D /* 3DepictTests-Info.plist */,
-				9520659B13FA968000149A0D /* InfoPlist.strings */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		952065C913FA978100149A0D /* filters */ = {
-			isa = PBXGroup;
-			children = (
-				952065CA13FA978100149A0D /* allFilter.cpp */,
-				952065CB13FA978100149A0D /* allFilter.h */,
-				952065CD13FA978100149A0D /* annotation.h */,
-				952065CE13FA978100149A0D /* boundingBox.cpp */,
-				952065CF13FA978100149A0D /* boundingBox.h */,
-				952065D013FA978100149A0D /* clusterAnalysis.cpp */,
-				952065D113FA978100149A0D /* clusterAnalysis.h */,
-				952065D213FA978100149A0D /* compositionProfile.cpp */,
-				952065D313FA978100149A0D /* compositionProfile.h */,
-				952065D413FA978100149A0D /* externalProgram.cpp */,
-				952065D513FA978100149A0D /* externalProgram.h */,
-				952065D613FA978100149A0D /* ionClip.cpp */,
-				952065D713FA978100149A0D /* ionClip.h */,
-				952065D813FA978100149A0D /* ionColour.cpp */,
-				952065D913FA978100149A0D /* ionColour.h */,
-				952065DA13FA978100149A0D /* ionDownsample.cpp */,
-				952065DB13FA978100149A0D /* ionDownsample.h */,
-				952065DC13FA978100149A0D /* ionInfo.cpp */,
-				952065DD13FA978100149A0D /* ionInfo.h */,
-				952065DE13FA978100149A0D /* posLoad.cpp */,
-				952065DF13FA978100149A0D /* posLoad.h */,
-				952065E013FA978100149A0D /* rangeFile.cpp */,
-				952065E113FA978100149A0D /* rangeFile.h */,
-				952065E213FA978100149A0D /* spatialAnalysis.cpp */,
-				952065E313FA978100149A0D /* spatialAnalysis.h */,
-				952065E413FA978100149A0D /* spectrumPlot.cpp */,
-				952065E513FA978100149A0D /* spectrumPlot.h */,
-				952065E613FA978100149A0D /* transform.cpp */,
-				952065E713FA978100149A0D /* transform.h */,
-				952065E813FA978100149A0D /* voxelise.cpp */,
-				952065E913FA978100149A0D /* voxelise.h */,
-			);
-			name = filters;
-			path = ../../src/filters;
-			sourceTree = "<group>";
-		};
-		952065EA13FA978100149A0D /* glade-skeleton */ = {
-			isa = PBXGroup;
-			children = (
-				952065EB13FA978100149A0D /* preferencesDialog.wxg */,
-				952065EC13FA978100149A0D /* skeleton-part2.wxg */,
-				952065ED13FA978100149A0D /* skeleton.wxg */,
-			);
-			name = "glade-skeleton";
-			path = "../../src/glade-skeleton";
-			sourceTree = "<group>";
-		};
-		9520660E13FA978100149A0D /* tex-source */ = {
-			isa = PBXGroup;
-			children = (
-				9520660F13FA978100149A0D /* 3Depict-icon.icns */,
-				9520661013FA978100149A0D /* 3Depict-icon.svg */,
-				9520661113FA978100149A0D /* enlarge.svg */,
-				9520661213FA978100149A0D /* Icons-licence.txt */,
-				9520661313FA978100149A0D /* keyboard-alt.svg */,
-				9520661413FA978100149A0D /* keyboard-command.svg */,
-				9520661513FA978100149A0D /* keyboard-ctrl.svg */,
-				9520661613FA978100149A0D /* keyboard-shift.svg */,
-				9520661713FA978100149A0D /* keyboard-tab.svg */,
-				9520661813FA978100149A0D /* Left-Right-arrow.svg */,
-				9520661913FA978100149A0D /* Left_clicked_mouse.svg */,
-				9520661A13FA978100149A0D /* middle_clicked_mouse.svg */,
-				9520661B13FA978100149A0D /* Right-arrow.svg */,
-				9520661C13FA978100149A0D /* Right_clicked_mouse.svg */,
-				9520661D13FA978100149A0D /* rotateArrow.svg */,
-				9520661E13FA978100149A0D /* scroll_wheel_mouse.svg */,
-			);
-			name = "tex-source";
-			path = "../../src/tex-source";
-			sourceTree = "<group>";
-		};
-		9520661F13FA978100149A0D /* textures */ = {
-			isa = PBXGroup;
-			children = (
-				9520662013FA978100149A0D /* enlarge.png */,
-				9520662113FA978100149A0D /* keyboard-alt.png */,
-				9520662213FA978100149A0D /* keyboard-command.png */,
-				9520662313FA978100149A0D /* keyboard-ctrl.png */,
-				9520662413FA978100149A0D /* keyboard-shift.png */,
-				9520662513FA978100149A0D /* keyboard-tab.png */,
-				9520662613FA978100149A0D /* Left-Right-arrow.png */,
-				9520662713FA978100149A0D /* Left_clicked_mouse.png */,
-				9520662813FA978100149A0D /* middle_clicked_mouse.png */,
-				9520662913FA978100149A0D /* Right-arrow.png */,
-				9520662A13FA978100149A0D /* Right_clicked_mouse.png */,
-				9520662B13FA978100149A0D /* rotateArrow.png */,
-				9520662C13FA978100149A0D /* scroll_wheel_mouse.png */,
-			);
-			name = textures;
-			path = ../../src/textures;
-			sourceTree = "<group>";
-		};
-		95FB7B7013FB7272007CD6A0 /* libs */ = {
-			isa = PBXGroup;
-			children = (
-				95FB7B6E13FB6EA5007CD6A0 /* libpng.dylib */,
-				95FB7B6C13FB6E99007CD6A0 /* libqhull.dylib */,
-				95FB7B6A13FB6E8D007CD6A0 /* libgsl.dylib */,
-				95FB7B6813FB6E85007CD6A0 /* libm.dylib */,
-				95FB7B6613FB6E71007CD6A0 /* libiconv.dylib */,
-				95FB7B6413FB6E67007CD6A0 /* libpthread.dylib */,
-				95FB7B6213FB6E59007CD6A0 /* libxml2.dylib */,
-				95FB7B6013FB6E3D007CD6A0 /* libbz2.dylib */,
-				95FB7B5E13FB6E2E007CD6A0 /* libz.dylib */,
-				95FB7B5C13FB6E1B007CD6A0 /* libfreetype.dylib */,
-				95FB7B5A13FB6E00007CD6A0 /* libmgl.dylib */,
-				95FB7B5813FB6D98007CD6A0 /* QuickTime.framework */,
-				95FB7B5613FB6D8B007CD6A0 /* OpenGL.framework */,
-				95FB7B5413FB6D80007CD6A0 /* libSystem.dylib */,
-				95FB7B5213FB6D4F007CD6A0 /* AudioToolbox.framework */,
-				95FB7B5013FB6D3C007CD6A0 /* Cocoa.framework */,
-				95FB7B4E13FB6D2B007CD6A0 /* Carbon.framework */,
-				95FB7B4C13FB6D1E007CD6A0 /* IOKit.framework */,
-				95FB7B4A13FB65E2007CD6A0 /* libintl.dylib */,
-				95FB7B4813FB65B7007CD6A0 /* libftgl.dylib */,
-			);
-			name = libs;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		9520657013FA968000149A0D /* 3Depict */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 952065A413FA968000149A0D /* Build configuration list for PBXNativeTarget "3Depict" */;
-			buildPhases = (
-				95FB7B8013FB7353007CD6A0 /* ShellScript */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = 3Depict;
-			productName = 3Depict;
-			productReference = 9520657113FA968000149A0D /* 3Depict.app */;
-			productType = "com.apple.product-type.application";
-		};
-		9520659113FA968000149A0D /* 3DepictTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 952065A713FA968000149A0D /* Build configuration list for PBXNativeTarget "3DepictTests" */;
-			buildPhases = (
-				9520658D13FA968000149A0D /* Sources */,
-				9520658E13FA968000149A0D /* Frameworks */,
-				9520658F13FA968000149A0D /* Resources */,
-				9520659013FA968000149A0D /* ShellScript */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				9520659713FA968000149A0D /* PBXTargetDependency */,
-			);
-			name = 3DepictTests;
-			productName = 3DepictTests;
-			productReference = 9520659213FA968000149A0D /* 3DepictTests.octest */;
-			productType = "com.apple.product-type.bundle";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		9520656813FA968000149A0D /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				ORGANIZATIONNAME = "Australian Centre for Microscopy & Microanalysis";
-			};
-			buildConfigurationList = 9520656B13FA968000149A0D /* Build configuration list for PBXProject "3Depict" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 9520656613FA968000149A0D;
-			productRefGroup = 9520657213FA968000149A0D /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				9520657013FA968000149A0D /* 3Depict */,
-				9520659113FA968000149A0D /* 3DepictTests */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		9520658F13FA968000149A0D /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				9520659D13FA968000149A0D /* InfoPlist.strings in Resources */,
-				9520659F13FA968000149A0D /* _DepictTests.h in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		9520659013FA968000149A0D /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
-		};
-		95FB7B8013FB7353007CD6A0 /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "cd ..\nmake clean\n./makeMacOSXApp --update-config=no";
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		9520658D13FA968000149A0D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				952065A113FA968000149A0D /* _DepictTests.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		9520659713FA968000149A0D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 9520657013FA968000149A0D /* 3Depict */;
-			targetProxy = 9520659613FA968000149A0D /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
-		9520657E13FA968000149A0D /* InfoPlist.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				9520657F13FA968000149A0D /* en */,
-			);
-			name = InfoPlist.strings;
-			sourceTree = "<group>";
-		};
-		9520658413FA968000149A0D /* Credits.rtf */ = {
-			isa = PBXVariantGroup;
-			children = (
-				9520658513FA968000149A0D /* en */,
-			);
-			name = Credits.rtf;
-			sourceTree = "<group>";
-		};
-		9520658A13FA968000149A0D /* MainMenu.xib */ = {
-			isa = PBXVariantGroup;
-			children = (
-				9520658B13FA968000149A0D /* en */,
-			);
-			name = MainMenu.xib;
-			sourceTree = "<group>";
-		};
-		9520659B13FA968000149A0D /* InfoPlist.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				9520659C13FA968000149A0D /* en */,
-			);
-			name = InfoPlist.strings;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		952065A213FA968000149A0D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = macosx;
-			};
-			name = Debug;
-		};
-		952065A313FA968000149A0D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.7;
-				SDKROOT = macosx;
-			};
-			name = Release;
-		};
-		952065A513FA968000149A0D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ENABLE_OPENMP_SUPPORT = YES;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "3Depict/3Depict-Prefix.pch";
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_VERSION = "";
-				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = NO;
-				GCC_WARN_UNUSED_VALUE = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = "";
-				INFOPLIST_FILE = "3Depict/3Depict-Info.plist";
-				LIBRARY_SEARCH_PATHS = "";
-				OTHER_CFLAGS = (
-					"-I/opt/local/include",
-					"-I/opt/local/include/libpng14",
-					"-I/opt/local/include/freetype2",
-					"-I/opt/local/include/libxml2",
-					"-I/opt/local/lib/wx/include/osx_cocoa-unicode-2.9",
-					"-I/opt/local/include/wx-2.9",
-					"-D_FILE_OFFSET_BITS=64",
-					"-DWXUSINGDLL",
-					"-D__WXMAC__",
-					"-D__WXOSX__",
-					"-D__WXOSX_COCOA__",
-				);
-				OTHER_LDFLAGS = (
-					"-L/opt/local/lib",
-					"-lwx_osx_cocoau_gl-2.9",
-					"-lwx_osx_cocoau-2.9",
-				);
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				USER_HEADER_SEARCH_PATHS = "";
-				WRAPPER_EXTENSION = app;
-			};
-			name = Debug;
-		};
-		952065A613FA968000149A0D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ENABLE_OPENMP_SUPPORT = YES;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "3Depict/3Depict-Prefix.pch";
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_VERSION = "";
-				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = NO;
-				GCC_WARN_UNUSED_VALUE = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = "";
-				INFOPLIST_FILE = "3Depict/3Depict-Info.plist";
-				LIBRARY_SEARCH_PATHS = "";
-				OTHER_CFLAGS = (
-					"-I/opt/local/include",
-					"-I/opt/local/include/libpng14",
-					"-I/opt/local/include/freetype2",
-					"-I/opt/local/include/libxml2",
-					"-I/opt/local/lib/wx/include/osx_cocoa-unicode-2.9",
-					"-I/opt/local/include/wx-2.9",
-					"-D_FILE_OFFSET_BITS=64",
-					"-DWXUSINGDLL",
-					"-D__WXMAC__",
-					"-D__WXOSX__",
-					"-D__WXOSX_COCOA__",
-				);
-				OTHER_LDFLAGS = (
-					"-L/opt/local/lib",
-					"-lwx_osx_cocoau_gl-2.9",
-					"-lwx_osx_cocoau-2.9",
-				);
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				USER_HEADER_SEARCH_PATHS = "";
-				WRAPPER_EXTENSION = app;
-			};
-			name = Release;
-		};
-		952065A813FA968000149A0D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/3Depict.app/Contents/MacOS/3Depict";
-				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "3Depict/3Depict-Prefix.pch";
-				INFOPLIST_FILE = "3DepictTests/3DepictTests-Info.plist";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUNDLE_LOADER)";
-				WRAPPER_EXTENSION = octest;
-			};
-			name = Debug;
-		};
-		952065A913FA968000149A0D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/3Depict.app/Contents/MacOS/3Depict";
-				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "3Depict/3Depict-Prefix.pch";
-				INFOPLIST_FILE = "3DepictTests/3DepictTests-Info.plist";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUNDLE_LOADER)";
-				WRAPPER_EXTENSION = octest;
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		9520656B13FA968000149A0D /* Build configuration list for PBXProject "3Depict" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				952065A213FA968000149A0D /* Debug */,
-				952065A313FA968000149A0D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		952065A413FA968000149A0D /* Build configuration list for PBXNativeTarget "3Depict" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				952065A513FA968000149A0D /* Debug */,
-				952065A613FA968000149A0D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		952065A713FA968000149A0D /* Build configuration list for PBXNativeTarget "3DepictTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				952065A813FA968000149A0D /* Debug */,
-				952065A913FA968000149A0D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 9520656813FA968000149A0D /* Project object */;
-}
diff --git a/packaging/mac/3package.sh b/packaging/mac/3package.sh
index 2e6c292..870de0b 100755
--- a/packaging/mac/3package.sh
+++ b/packaging/mac/3package.sh
@@ -11,10 +11,18 @@ make distclean > out.txt 2>&1
 VERSION=`cat ./configure.ac | grep '^\s*AC_INIT(' | awk -F, '{ print $2 } ' | sed 's/\s*\[//' | sed 's/\]\s*//' | sed 's/\ //g'`
 BUILT_PROGRAMS_DIR=.
 MAC_OS_VER=`sw_vers | grep ProductVersion | awk '{print $2}'`
-
-#Set bundle version
-sed "s/BUNDLE_VERSION/${VERSION}/" ./3Depict.app/Contents/Info.plist > ./test.txt
-mv ./test.txt ./3Depict.app/Contents/Info.plist
+YEAR=`date | awk '{print $NF}'`
+
+#Fix some semi-constant values
+#===
+INFO_PLIST="./3Depict.app/Contents/Info.plist"
+#Set program version
+sed -i "s/BUNDLE_VERSION/${VERSION}/" ${INFO_PLIST}
+#Set year
+sed -i "s/3Depict Copyright (C) 20[123][0-9]/${DATEYEAR}/" ${INFO_PLIST}
+#Set minimum OS numbber
+sed -i "s/MIN_OS_VER/${MAC_OS_VER}/"  ${INFO_PLIST}
+#===
 
 time ./makeMacOSXApp --update-config=yes --parallel=yes --debug=no > out.txt 2>&1
 if [ x"`tail -1 out.txt`" == x"Done" ] ; then
@@ -30,6 +38,12 @@ fi
 #--
 #TODO: Check debug symbols are stripped
 
+#Ensure that program name not screwed up by XCode
+if [ x`grep ${INFO_PLIST} -Depict` != x"" ] ; then
+	echo "Program name incorrectly stored in package, is listed as _Depict, rather than $PROGRAM_NAME"
+	exit 1
+fi
+
 #--
 
 ARCHIVE_FILENAME=`echo "${BUILT_PROGRAMS_DIR}/${PROGRAM_NAME}-${VERSION}-${MAC_OS_VER}.pkg"`
diff --git a/packaging/mac/MacPackageMaker.pmdoc/013depict-contents.xml b/packaging/mac/MacPackageMaker.pmdoc/013depict-contents.xml
deleted file mode 100644
index bd9f4c9..0000000
--- a/packaging/mac/MacPackageMaker.pmdoc/013depict-contents.xml
+++ /dev/null
@@ -1 +0,0 @@
-<pkg-contents spec="1.12"><f n="3Depict.app" o="" g="" p="0" pt="/Users/anna/Documents/hg/3Depict-0.0.6/3Depict.app" m="false" t="file"/></pkg-contents>
\ No newline at end of file
diff --git a/packaging/mac/MacPackageMaker.pmdoc/013depict.xml b/packaging/mac/MacPackageMaker.pmdoc/013depict.xml
deleted file mode 100644
index 90bf4e3..0000000
--- a/packaging/mac/MacPackageMaker.pmdoc/013depict.xml
+++ /dev/null
@@ -1 +0,0 @@
-<pkgref spec="1.12" uuid="5C435BC0-4446-41BB-A14F-167A1F29D854"><config><identifier>net.sourceforge.3Depict.pkg</identifier><version>1.0</version><description></description><post-install type="none"/><requireAuthorization/><installFrom mod="true" includeRoot="true">/Users/anna/Documents/hg/3Depict-0.0.6/3Depict.app</installFrom><installTo>/Applications</installTo><flags><followSymbolicLinks/></flags><packageStore type="internal"></packageStore><mod>installTo</mod><mod>relocatable</mod><m [...]
\ No newline at end of file
diff --git a/packaging/mac/MacPackageMaker.pmdoc/index.xml b/packaging/mac/MacPackageMaker.pmdoc/index.xml
deleted file mode 100644
index c71f109..0000000
--- a/packaging/mac/MacPackageMaker.pmdoc/index.xml
+++ /dev/null
@@ -1 +0,0 @@
-<pkmkdoc spec="1.12"><properties><build>/Users/anna/Documents/hg/3Depict-0.0.6/3Depict-0.0.6.pkg</build><organization>net.sourceforge.3Depict</organization><userSees ui="easy"/><min-target os="2"/><domain anywhere="true"/></properties><distribution><versions min-spec="1.000000"/><scripts></scripts></distribution><contents><choice title="3Depict" id="choice0" starts_selected="true" starts_enabled="true" starts_hidden="false"><pkgref id="net.sourceforge.3Depict.pkg"/></choice></contents><r [...]
\ No newline at end of file
diff --git a/packaging/mac/makeMacOSXApp b/packaging/mac/makeMacOSXApp
index 69b58c2..d5d12b5 100755
--- a/packaging/mac/makeMacOSXApp
+++ b/packaging/mac/makeMacOSXApp
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-export PATH=/opt/local/bin:$PATH
+export PATH=/opt/local/bin:$PATH:/opt//local/Library/Frameworks/wxWidgets.framework/Versions/wxWidgets/3.0/bin
 #This will make the mac .app bundle
 
 if [ $1 = '--update-config=yes' ]; then
@@ -16,9 +16,11 @@ if [ $1 = '--update-config=yes' ]; then
 		DISABLE_DEBUG="--disable-debug-checks"
 	fi
 
-	CFLAGS="$CFLAGS -I/opt/local/include -I/usr/local/include" \
-	LDFLAGS="$LDFLAGS -L/opt/local/lib -L/usr/local/lib -headerpad_max_install_names" \
-	./configure $SHOULD_PARALLEL $DISABLE_DEBUG 
+	CXX="`wx-config --cxx` " \
+	CFLAGS="$CFLAGS -I/opt/local/include -I/usr/local/include " \
+	CXXFLAGS="$CXXFLAGS -I/opt/local/include -I/usr/local/include " \
+	LDFLAGS="$LDFLAGS -L/opt/local/lib -L/usr/local/lib" \
+	./configure $SHOULD_PARALLEL $DISABLE_DEBUG --enable-mgl2=yes
 
 	if [ $? -ne 0 ]; then
 		echo "Configure unsuccessful - exiting"
diff --git a/packaging/makeTarball.sh b/packaging/makeTarball.sh
index aa8935c..4d31b73 100755
--- a/packaging/makeTarball.sh
+++ b/packaging/makeTarball.sh
@@ -100,8 +100,8 @@ if [ x"` grep '^Version:' packaging/RPM/3Depict.spec  | grep $VER`"  = x"" ] ; t
 	echo " WARNING: Program version does not match between configure.ac and packaging/RPM/3Depict.spec" >> $MSG_FILE
 fi
 
-if [ x"` grep 'PRODUCT_VERSION'  packaging/windows-installer/windows-installer.nsi | grep $VER`"  = x"" ] ; then
-	echo " WARNING: Program version does not match between configure.ac and packaging/windows-installer/windows-installer.nsi" >> $MSG_FILE
+if [ x"` grep 'PRODUCT_VERSION'  packaging/mingw-debian-cross/windows-installer.nsi | grep $VER`"  = x"" ] ; then
+	echo " WARNING: Program version does not match between configure.ac and packaging/mingw-debian-cross/windows-installer.nsi" >> $MSG_FILE
 fi
 
 #Check latex manual
diff --git a/packaging/manpage/3Depict.1 b/packaging/manpage/3Depict.1
old mode 100644
new mode 100755
diff --git a/packaging/mingw-debian-cross/bootstrap.sh b/packaging/mingw-debian-cross/bootstrap.sh
index 2088cd1..a1661a7 100755
--- a/packaging/mingw-debian-cross/bootstrap.sh
+++ b/packaging/mingw-debian-cross/bootstrap.sh
@@ -47,7 +47,6 @@ if [ ! -d code/3Depict ] || [ ! -f code/3Depict/src/3Depict.cpp ] ; then
 fi
 
 
-DIST_NAME=""
 BASE=`pwd`
 PREFIX=/
 NUM_PROCS=4
@@ -61,26 +60,25 @@ if [ `id -u` -eq 0 ]; then
 fi
 #1) Filezilla wxwidgets patch for 64 bit support under mingw
 #2) own patch for fixing wx-config's lack of sysroot support
-PATCHES_WXWIDGETS_PRE="wxwidgets2.8-2.8.12-mingw64-1.patch"
-PATCHES_WXWIDGETS_POST="wxwidgets2.8-wx-config-sysroot.patch"
-
-
-#Only required for 2.7.8
-PATCHES_LIBXML="libxml-impfree.patch"
+PATCHES_WXWIDGETS_PRE="wxWidgets-2.8.12-mingw64-1.patch configure-wxbool-patch"
+PATCHES_WXWIDGETS_POST="wx-config-sysroot.patch"
 #1) Zlib no longer needs to explicitly link libc, and will fail if it tries
 PATCHES_ZLIB="zlib-no-lc.patch"
 #1) Override some configure patches to bypass false positive failures
-PATCHES_FTGL="ftgl-override-configure"
-
+PATCHES_FTGL="ftgl-disable-doc"
+PATCHES_FTGL_POSTCONF="ftgl-override-configure-2"
 #1) gettext-tools fails in various places, but we don't actually need it, so turn it off
 #2) gettext fails to correctly determine windows function call prefix.
 #   should be fixed for gettext > 0.18.1.1 ?
 #   https://lists.gnu.org/archive/html/bug-gettext/2012-12/msg00071.html
-PATCHES_GETTEXT="gettext-disable-tools gettext-win32-prefix"
+PATCHES_GETTEXT="gettext-disable-tools"    #gettext-win32-prefix
+
+PATCHES_GLEW="glew-makefile.base"
 
-PATCHES_GLEW="glew-makefile"
+#Disable broken build for "widgets" directory, which we don't need
+PATCHES_MATHGL="mathgl-disable-widgets"
 
-PATCH_LIST="$PATCHES_WXWIDGETS_PRE $PATCHES_WXWIDGETS_POST $PATCHES_GSL $PATCHES_ZLIB $PATCHES_LIBPNG $PATCHES_GETTEXT $PATCHES_FTGL $PATCHES_GLEW $PATCHES_LIBXML"
+PATCH_LIST="$PATCHES_WXWIDGETS_PRE $PATCHES_WXWIDGETS_POST $PATCHES_GSL $PATCHES_ZLIB $PATCHES_LIBPNG $PATCHES_GETTEXT $PATCHES_FTGL $PATCHES_GLEW $PATCHES_MATHGL $PATCHES_FTGL_POSTCONF"
 
 BUILD_STATUS_FILE="$BASE/build-status"
 PATCH_STATUS_FILE="$BASE/patch-status"
@@ -99,7 +97,7 @@ function applyPatches()
 {
 	for i in $APPLY_PATCH_ARG
 	do
-		if [ x"`cat $PATCH_STATUS_FILE | grep "$i"`" != x"" ] ; then
+		if [ x"`cat $PATCH_STATUS_FILE | grep -x "$i"`" != x"" ] ; then
 			echo "Patch already applied :" $i
 			continue
 		fi
@@ -125,13 +123,7 @@ function install_mingw()
 	GET_PACKAGES="";
 	for i in $MINGW_PACKAGES
 	do
-		APT_RESULT=`LANG=C apt-cache policy $i | grep Installed | awk '{print $2}'`
-		if [ x"$APT_RESULT" == x"" ] ; then
-			echo "couldn't find package $i in sources, but we need it..." 
-			exit 1;
-		fi
-
-		if [ x"${APT_RESULT}" == x"(none)" ] ; then
+		if [ x`apt-cache pkgnames --installed $i` != x"$i" ] ; then
 			GET_PACKAGES="$GET_PACKAGES $i";
 		fi
 	done
@@ -151,7 +143,7 @@ function grabDeps()
 	if [ x$DIST_NAME == x"Ubuntu" ] || [ x$DIST_NAME == x"LinuxMint" ] ; then 
 		LIBJPEGNAME="libjpeg6b"
 	else
-		LIBJPEGNAME="libjpeg"
+		LIBJPEGNAME="libjpeg8"
 	
 	fi
 	DEB_PACKAGES="$DEB_PACKAGES $LIBJPEGNAME"
@@ -181,11 +173,11 @@ function grabDeps()
 
 
 		done
-
-		if [ $? -ne 0 ] ; then
-			echo "apt-get source failed... Maybe check internet connection, then try updating package database, then re-run?"
-			exit 1
-		fi
+	fi
+	
+	if [ $? -ne 0 ] ; then
+		echo "apt-get source failed... Maybe check internet connection, then try updating package database, then re-run?"
+		exit 1
 	fi
 
 	#Move debian stuff into packages folder
@@ -223,7 +215,7 @@ function grabDeps()
 		grep -v $i ../build-status  > tmp
 		mv tmp ../build-status
 	done
-	
+
 	#extract libiconv if needed
 	#--
 	LIBICONV=libiconv-1.14
@@ -244,13 +236,13 @@ function grabDeps()
 	fi	
 
 	#---
+
 	#We also need to install nsis, though it is not a strict "dependency" per-se.
 	if [ x`which makensis` == x"" ] ; then
 		echo "Installing nsis via apt-get";
 		sudo apt-get install nsis || { echo "Failed installation"; exit 1; }
 	fi
-	
-	
+
 	popd 2> /dev/null
 
 }
@@ -358,6 +350,13 @@ function build_glew()
 	fi
 
 	#Perform dynamic modification of patch
+	if [ x`grep patches/glew-makefile.base HOST_VAL` == x""   ||  x`grep patches/glew-makefile.base BASEDIR` == x"" ] ; then
+		echo "patches/glew-makefile did not contain replacement keywords"
+		exit 1
+	fi
+
+	#Modify the patch appropriately
+	cp patches/glew-makefile.base patches/glew-makefile
 	sed -i "s at HOST_VAL@$HOST_VAL@" patches/glew-makefile
 	sed -i "s at BASEDIR@$BASE@" patches/glew-makefile
 	
@@ -370,12 +369,13 @@ function build_glew()
 		exit 1
 	fi
 	
-	make clean
-	rm -f configure.log
 
-	APPLY_PATCH_ARG="$PATCHES_GLEW"
+	APPLY_PATCH_ARG="glew-makefile"
 	applyPatches
 
+	make clean
+	rm -f configure.log
+	
 	LD=$CC make -j $NUM_PROCS || { echo "glew build failed"; exit 1; } 
 
 	make install DESTDIR="$BASE"|| { echo "glew install failed"; exit 1; } 
@@ -709,6 +709,7 @@ function build_wx()
 
 	APPLY_PATCH_ARG=$PATCHES_WXWIDGETS_PRE
 	applyPatches
+#WX_DISABLE="--disable-compat26 --disable-ole --disable-dataobj --disable-ipc --disable-apple_ieee --disable-zipstream --disable-protocol_ftp --disable-mshtmlhelp --disable-aui --disable-mdi --disable-postscript --disable-datepick --disable-splash --disable-wizarddlg --disable-joystick --disable-loggui --disable-debug --disable-logwin --disable-logdlg --disable-tarstream --disable-fs_archive --disable-fs_inet --disable-fs_zip --disable-snglinst --disable-sound --disable-variant --without-regex"
 
 	./configure --host=$HOST_VAL --enable-shared --disable-static --with-opengl --enable-unicode --without-regex --prefix=/ || { echo "wxwidgets configure failed"; exit 1; } 
 
@@ -878,11 +879,15 @@ function build_mathgl()
 	fi
 	make clean
 
+	APPLY_PATCH_ARG=$PATCHES_MATHGL
+	applyPatches
+
 	libtoolize --copy --force
 	aclocal
+	automake --add-missing
 
 	autoreconf
-	LIBS="${LIBS} -lz" ./configure --host=$HOST_VAL --disable-pthread --enable-shared --disable-static --prefix=/ || { echo "mathgl configure failed"; exit 1; } 
+	LIBS="${LIBS} -lz" ./configure --host=$HOST_VAL --disable-gsl --disable-pthread --enable-shared --disable-static --prefix=/ || { echo "mathgl configure failed"; exit 1; } 
 
 	#RPATH disable hack
 	sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
@@ -924,17 +929,34 @@ function build_ftgl()
 	fi
 	make clean
 
+	APPLY_PATCH_ARG="$PATCHES_FTGL"
+	applyPatches
+
+	autoreconf
+	libtoolize
 
+	APPLY_PATCH_ARG="$PATCHES_FTGL_POSTCONF"
+	applyPatches
 	#rename GLU to glu32 and gl to opengl32
 	sed -i s/'\-lGLU'/-lglu32/ configure
 	sed -i s/'\-lGL'/-lopengl32/ configure
 
-	APPLY_PATCH_ARG="$PATCHES_FTGL"
-	applyPatches
+	#configure tries to link against wrong prototypes. Override this
+	sed -i 's/char glBegin() ;//' configure
+	sed -i 's/char gluNewTess ();//' configure
+
+	sed -i 's/return glBegin ()/return 0;/' configure
+	sed -i 's/return gluNewTess ()/return 0;/' configure
+	sed -i 's/return glBegin(GL_POINTS)/return 0;/' configure
+
+
 
 	./configure --host=$HOST_VAL --enable-shared --disable-static --prefix=/ || { echo "ftgl configure failed"; exit 1; } 
 
-	
+
+	#MAkefile refers to ECHO variable for reporting completion, which does not exist
+	sed -i 's/ECHO_C =/ECHO=echo/' Makefile
+
 	make -j $NUM_PROCS || { echo "ftgl build failed"; exit 1; } 
 	
 	make install DESTDIR="$BASE"|| { echo "ftgl install failed"; exit 1; } 
@@ -1047,6 +1069,7 @@ function build_3Depict()
 	fi
 
 	#HACK - strip all makefiles of -D_GLIBCXX_DEBUG
+	#	mingw & GLIBCXX_DEBG don't play nice
 	find ./ -name Makefile -exec sed -i 's/-D_GLIBCXX_DEBUG//g' {} \;
 
 	make -j$NUM_PROCS
@@ -1093,7 +1116,7 @@ function make_package()
 {
 	pushd ./code/3Depict 2> /dev/null
 
-	NSI_FILE=./packaging/mingw-debian-cross/windows-installer.nsi
+	NSI_FILE=./windows-installer.nsi
 	if [ ! -f $NSI_FILE ] ; then
 		echo "NSI file missing whilst trying to build package"
 		exit 1;
@@ -1108,34 +1131,53 @@ function make_package()
 
 
 	echo -n " Copying dll files... "
-	DLL_FILES=`grep File windows-installer.nsi | egrep '(\.dll|\.so)' | sed 's/.*src.//' | sed 's/\"//' | sed 's/\r/ /g'`
+	SYSTEM_DLLS="(ADVAPI32.dll|COMCTL32.DLL|COMDLG32.DLL|GDI32.dll|KERNEL32.dll|ole32.dll|OLEAUT32.dll|RPCRT4.dll|SHELL32.DLL|USER32.dll|WINMM.DLL|WINSPOOL.DRV|WSOCK32.DLL|GLU32.dll|OPENGL32.dll|msvcrt.dll)"
 
+	DLL_FILES=`${HOST_VAL}-objdump -x src/3Depict.exe | grep 'DLL Name:' | awk '{print $3}' | egrep -i -v ${SYSTEM_DLLS}`
+	FOUND_DLLS=""
 	SYS_DIR=/usr/lib/gcc/${HOST_VAL}/
+
+	echo "DEBUG :" $DLL_FILES
+	rm -f tmp-dlls tmp-found-dlls
+
 	#copy the DLL files from system or 
 	# from the build locations
-	for i in ${DLL_FILES}
+	while [ x"$DLL_FILES" != x"" ] ;
 	do
-		HAVE_DLL=0
-		for j in ${BASE}/lib/ ${BASE}/bin/ $SYS_DIR
+		echo $DLL_FILES | tr '\ ' '\n' > tmp-dlls
+		DLL_FILES=`cat tmp-dlls | sort | uniq`
+
+		echo "Looking for these:" $DLL_FILES
+		echo "Have found these:" $FOUND_DLLS
+		for i in $DLL_FILES
 		do
-			FIND_RES=`find $j -name $i | head -n 1`
-			if [ x$FIND_RES != x"" ] ; then
-				HAVE_DLL=1;
-				cp $FIND_RES ./src/
-				break;
+			HAVE_DLL=0
+			for j in ${BASE}/lib/ ${BASE}/bin/ $SYS_DIR
+			do
+				FIND_RES=`find $j -name $i | head -n 1`
+				if [ x$FIND_RES != x"" ] ; then
+					HAVE_DLL=1;
+					cp $FIND_RES ./src/
+					FOUND_DLLS="$FOUND_DLLS `basename $FIND_RES`"
+					break;
+				fi
+			done
+
+			if [ $HAVE_DLL -eq 0 ] ; then
+				echo "Couldnt find DLL :" 
+				echo " $i "
+				echo " looked in ${BASE}/lib/ and $SYS_DIR"
+				exit 1;
 			fi
 		done
 
-		if [ $HAVE_DLL -eq 0 ] ; then
-			echo "Couldnt find DLL :" 
-			echo " $i "
-			echo " looked in ${BASE}/lib/ and $SYS_DIR"
-			exit 1;
-		fi
+		#Update the list of dll files
+		echo $FOUND_DLLS |tr '\ ' '\n' | sort | uniq > tmp-found-dlls
+		DLL_FILES=`${HOST_VAL}-objdump -x ./src/3Depict.exe ./src/*dll | grep 'DLL Name:' | awk '{print $3}' | egrep -i -v ${SYSTEM_DLLS} | grep -iv -f tmp-found-dlls | sort | uniq`
+
 	done
 	echo "done."
 
-	
 	if [ $IS_RELEASE -ne 0 ] ; then
 		#Strip debugging information
 		pushd src/ > /dev/null
@@ -1143,11 +1185,31 @@ function make_package()
 		popd > /dev/null
 	fi
 
+	if [ x"`cat windows-installer.nsi | grep INSERT_DLLS_HERE`" == x"" ]  ||  [ x"`cat windows-installer.nsi | grep INSERT_UNINST_DLLS_HERE`" == x"" ] ; then
+		echo "DLL insertion/removal tokens not found. Was looking for INSERT_DLLS_HERE and INSERT_UNINST_DLLS_HERE"
+		exit 1
+	fi
+
+	#Insert DLL names automatically
+	cp windows-installer.nsi tmp.nsi
+	echo $FOUND_DLLS | sed 's/ /\n/g' |  sed 's@^@  File \"src\\@' | sed 's/$/\"/' > tmp-insert
+	perl -ne 's/^  ;INSERT_DLLS_HERE/`cat tmp-insert$1`/e;print' tmp.nsi >tmp2.nsi
+	mv tmp2.nsi tmp.nsi
+
+
+	echo $FOUND_DLLS | sed 's/ /\n/g' |  sed 's@^@  Delete \"$INSTDIR\\@' | sed 's/$/\"/' > tmp-insert
+	perl -ne 's/^  ;INSERT_UNINST_DLLS_HERE/`cat tmp-insert$1`/e;print' tmp.nsi > tmp2.nsi
+	mv tmp2.nsi tmp.nsi
+
+	#TODO: Why is perl converting this to dos?
+	dos2unix tmp.nsi
+
+	NSI_FILE=tmp.nsi
 
 	makensis `basename $NSI_FILE` ||  { echo "makensis failed" ; exit 1; }
 
 	if [ $IS_RELEASE -ne 0 ] ; then
-		VERSION=`cat $NSI_FILE | grep "define PRODUCT_VERSION " | awk '{print $3}' | sed s/\"//g | sed s/.$//`
+		VERSION=`cat $NSI_FILE | grep "define PRODUCT_VERSION " | awk '{print $3}' | sed s/\"//g | sed s/\s*$//`
 		TARGET_FILE=3Depict-$VERSION-$HOST_EXT.exe
 		mv Setup.exe  $TARGET_FILE
 		echo "-------------------"
@@ -1172,7 +1234,7 @@ createDirLayout
 #---
 case ${HOST_VAL}  in
 	x86_64-w64-mingw32)
-		if [ $DIST_NAME == "Ubuntu" ] || [ $DIST_NAME == "LinuxMint" ] ; then
+		if [ x"$DIST_NAME" == x"Ubuntu" ] || [ x"$DIST_NAME" == x"LinuxMint" ] ; then
 			MINGW_PACKAGES="mingw-w64-dev g++-mingw-w64-x86-64"
 		else
 			MINGW_PACKAGES="mingw-w64-x86-64-dev g++-mingw-w64-x86-64"
@@ -1222,13 +1284,13 @@ build_libxml2
 build_gsl
 build_qhull
 build_expat
-build_wx	# I'm not sure I've done this 100% right. Check wx-config output 
 build_freetype
 build_libiconv
 build_gettext 
 build_mathgl 
 build_ftgl 
 build_glew
+build_wx	# I'm not sure I've done this 100% right. Check wx-config output 
 
 build_3Depict
 
diff --git a/packaging/mingw-debian-cross/build-wx-3.0.sh b/packaging/mingw-debian-cross/build-wx-3.0.sh
new file mode 100755
index 0000000..2e9ceb0
--- /dev/null
+++ b/packaging/mingw-debian-cross/build-wx-3.0.sh
@@ -0,0 +1,172 @@
+#!/bin/bash
+BASE=`pwd`
+
+BUILD_STATUS_FILE="$BASE/build-status"
+PATCH_STATUS_FILE="$BASE/patch-status"
+
+PATCHES_WXWIDGETS_PRE="" #wxWidgets-2.8.12-mingw64-1.patch configure-wxbool-patch"
+PATCHES_WXWIDGETS_POST="wx-config-sysroot.patch"
+
+if [ ! -f host_val ] ; then
+	echo "Please select 32 or 64 bit by typing \"32\" or \"64\" (32/64)"
+	read HOST_VAL
+	
+	case $HOST_VAL in
+		32)
+			HOST_VAL="i686-w64-mingw32"
+			;;
+		64)
+			HOST_VAL="x86_64-w64-mingw32"
+			;;
+		
+		*) 
+			echo "Didn't understand HOST_VAL. You can override this by editing the script"
+			exit 1
+		;;
+	esac
+
+	#Save for next run
+	echo $HOST_VAL > host_val
+else
+	HOST_VAL=`cat host_val`
+fi
+
+
+if [ $HOST_VAL != "x86_64-w64-mingw32" ] && [ $HOST_VAL != i686-w64-mingw32 ] ; then
+	echo "Unknown HOST_VAL"
+	exit 1
+fi
+
+PREFIX=/
+NUM_PROCS=4
+
+if [ `id -u` -eq 0 ]; then
+	echo "This script should not be run as root."
+	echo " If you know what you are doing, you can disable this check, but be aware you _can_ break your system by doing this."
+	exit 1;
+fi
+
+function applyPatches()
+{
+	for i in $APPLY_PATCH_ARG
+	do
+		if [ x"`cat $PATCH_STATUS_FILE | grep "$i"`" != x"" ] ; then
+			echo "Patch already applied :" $i
+			continue
+		fi
+
+		echo "Applying patch:" $i
+		patch -tN -p$PATCH_LEVEL  < $BASE/patches/$i
+		
+		if [ $? -ne 0 ] ; then
+			echo "Failed applying patch :" $i
+			exit 1
+		fi
+		echo "applied patch"
+		echo $i >> $PATCH_STATUS_FILE
+	done
+}
+function isBuilt()
+{
+	if [ x`cat ${BUILD_STATUS_FILE} | grep $ISBUILT_ARG` != x"" ]  ; then
+		ISBUILT=1
+	else
+		ISBUILT=0
+	fi
+}
+
+function build_wx()
+{
+	NAME="libwx"
+	ISBUILT_ARG=${NAME}
+	isBuilt
+
+	if [ $ISBUILT -eq 1 ] ; then
+		return;
+	fi
+	
+	pushd deps >/dev/null
+	pushd wxWidgets-3.0* >/dev/null
+       	
+	if [ $? -ne 0 ] ; then
+		echo "wxwidgets dir missing, or duplicated?"
+		exit 1
+	fi
+
+	make clean
+
+#	APPLY_PATCH_ARG=$PATCHES_WXWIDGETS_PRE
+#	applyPatches
+#WX_DISABLE="--disable-compat26 --disable-ole --disable-dataobj --disable-ipc --disable-apple_ieee --disable-zipstream --disable-protocol_ftp --disable-mshtmlhelp --disable-aui --disable-mdi --disable-postscript --disable-datepick --disable-splash --disable-wizarddlg --disable-joystick --disable-loggui --disable-debug --disable-logwin --disable-logdlg --disable-tarstream --disable-fs_archive --disable-fs_inet --disable-fs_zip --disable-snglinst --disable-sound --without-regex --disable-s [...]
+
+	./configure --host=$HOST_VAL --enable-monolithic --disable-compat28 --disable-propgrid --enable-shared --disable-static --with-opengl --enable-msw --prefix=/ || { echo "wxwidgets configure failed"; exit 1; } 
+
+	#TODO: Where is this coming from ???
+	for i in `find ./ -name Makefile | grep -v samples | grep -v wxPython`
+	do
+		sed -i "s at -luuid-L@ -luuid -L@" $i
+	done	
+	
+	make -j $NUM_PROCS || { echo "wxwidgets build failed"; exit 1; } 
+	make install DESTDIR="$BASE"|| { echo "wxwidgets install failed"; exit 1; } 
+
+
+	
+	popd >/dev/null
+	popd >/dev/null
+
+	pushd ./bin/
+	unlink wx-config
+	cp `find ${BASE}/lib/wx/config/ -name \*unicode-3.0` wx-config
+	APPLY_PATCH_ARG=$PATCHES_WXWIDGETS_POST
+	PATCH_LEVEL=0
+#applyPatches
+	PATCH_LEVEL=1
+	sed -i "s at REPLACE_BASENAME@${BASE}@" wx-config || { echo "Failed to update wx-config with build root,. Aborting";  exit 1; }
+	popd
+
+	pushd ./lib/
+	ln -s wx-2.8/wx/ wx
+	popd
+
+
+	echo ${NAME} >> $BUILD_STATUS_FILE
+
+}
+
+#Install cross compiler
+#---
+case ${HOST_VAL}  in
+	x86_64-w64-mingw32)
+		if [ x"$DIST_NAME" == x"Ubuntu" ] || [ x"$DIST_NAME" == x"LinuxMint" ] ; then
+			MINGW_PACKAGES="mingw-w64-dev g++-mingw-w64-x86-64"
+		else
+		MINGW_PACKAGES="mingw-w64-x86-64-dev g++-mingw-w64-x86-64"
+		fi
+		HOST_EXT="win64"
+	;;
+	i686-w64-mingw32)
+		MINGW_PACKAGES="gcc-mingw32"
+		HOST_EXT="win32"
+	;;
+	*)
+		echo "Unknown host... please install deps manually,or alter script"
+		exit 1	
+	;;
+esac
+
+
+#set our needed environment variables
+PATH=${BASE}/bin/:/usr/$HOST_VAL/bin/:$PATH
+export CXX=${HOST_VAL}-g++
+export CPP=${HOST_VAL}-cpp
+export CC=${HOST_VAL}-gcc
+export CPPFLAGS=-I${BASE}/include/
+export CFLAGS=-I${BASE}/include/
+export CXXFLAGS=-I${BASE}/include/
+export LDFLAGS=-L${BASE}/lib/
+export RANLIB=${HOST_VAL}-ranlib
+export LIBS="-L${BASE}/lib/"
+DESTDIR=${BASE}
+
+build_wx	# I'm not sure I've done this 100% right. Check wx-config output 
diff --git a/packaging/mingw-debian-cross/patches/configure-wxbool-patch b/packaging/mingw-debian-cross/patches/configure-wxbool-patch
new file mode 100644
index 0000000..cb80c04
--- /dev/null
+++ b/packaging/mingw-debian-cross/patches/configure-wxbool-patch
@@ -0,0 +1,12 @@
+diff -r b625ea013cd8 configure
+--- a/configure	Sat Nov 16 00:00:48 2013 +0100
++++ b/configure	Sat Nov 16 00:01:50 2013 +0100
+@@ -26629,7 +26629,7 @@
+             else
+                                 wxUSE_LIBJPEG=sys
+ 
+-                if test "$wxUSE_MSW" = 1; then
++                if test 0 = 1; then
+                                                                                                     echo "$as_me:$LINENO: checking for boolean" >&5
+ echo $ECHO_N "checking for boolean... $ECHO_C" >&6
+ if test "${ac_cv_type_boolean+set}" = set; then
diff --git a/packaging/mingw-debian-cross/patches/ftgl-disable-doc b/packaging/mingw-debian-cross/patches/ftgl-disable-doc
new file mode 100644
index 0000000..0b04fd7
--- /dev/null
+++ b/packaging/mingw-debian-cross/patches/ftgl-disable-doc
@@ -0,0 +1,31 @@
+diff -r 798a38fb8fc4 Makefile.am
+--- a/Makefile.am	Sat Nov 16 16:50:20 2013 +0100
++++ b/Makefile.am	Sat Nov 16 16:50:44 2013 +0100
+@@ -1,7 +1,7 @@
+ 
+ ACLOCAL_AMFLAGS = -I m4
+ 
+-SUBDIRS = src test demo docs
++SUBDIRS = src 
+ DIST_SUBDIRS = $(SUBDIRS) msvc
+ 
+ pkgconfigdir = $(libdir)/pkgconfig
+diff -r b330fd541a40 configure.ac
+--- a/configure.ac	Sat Nov 16 16:54:52 2013 +0100
++++ b/configure.ac	Sat Nov 16 16:55:34 2013 +0100
+@@ -65,6 +65,7 @@
+ 
+ # Build HTML documentatin?
+ AC_PATH_PROG(DOXYGEN, doxygen, no)
++DOXYGEN="no"
+ AM_CONDITIONAL(HAVE_DOXYGEN, test "x$DOXYGEN" != "xno")
+ 
+ # Build PDF documentation?
+@@ -91,6 +92,7 @@
+     AC_MSG_RESULT(no)
+   fi
+ fi
++LATEX="no"
+ AM_CONDITIONAL(HAVE_LATEX, test "x${LATEX}" != "xno")
+ 
+ AC_CONFIG_FILES([
diff --git a/packaging/mingw-debian-cross/patches/ftgl-mingw32-prototype b/packaging/mingw-debian-cross/patches/ftgl-mingw32-prototype
old mode 100644
new mode 100755
diff --git a/packaging/mingw-debian-cross/patches/ftgl-override-configure b/packaging/mingw-debian-cross/patches/ftgl-override-configure
old mode 100644
new mode 100755
index a24021a..09e660b
--- a/packaging/mingw-debian-cross/patches/ftgl-override-configure
+++ b/packaging/mingw-debian-cross/patches/ftgl-override-configure
@@ -22,19 +22,6 @@
    ;
    return 0;
  }
-@@ -22597,11 +22595,10 @@
- #ifdef __cplusplus
- extern "C"
- #endif
--char glBegin ();
-+#include <GL/gl.h>
- int
- main ()
- {
--return glBegin ();
-   ;
-   return 0;
- }
 @@ -23014,11 +23011,10 @@
  #ifdef __cplusplus
  extern "C"
@@ -49,15 +36,3 @@
    ;
    return 0;
  }
-@@ -23067,11 +23063,9 @@
- #ifdef __cplusplus
- extern "C"
- #endif
--char gluNewTess ();
- int
- main ()
- {
--return gluNewTess ();
-   ;
-   return 0;
- }
diff --git a/packaging/mingw-debian-cross/patches/ftgl-override-configure-2 b/packaging/mingw-debian-cross/patches/ftgl-override-configure-2
new file mode 100644
index 0000000..1560ec9
--- /dev/null
+++ b/packaging/mingw-debian-cross/patches/ftgl-override-configure-2
@@ -0,0 +1,14 @@
+--- a/configure	2013-11-17 14:59:28.000000000 +0100
++++ b/configure	2013-11-17 14:59:30.000000000 +0100
+@@ -15764,11 +15764,6 @@
+ 
+ 
+ _ACEOF
+-if ac_fn_c_try_run "$LINENO"; then :
+-
+-else
+-  no_ft=yes
+-fi
+ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
diff --git a/packaging/mingw-debian-cross/patches/gettext-disable-tools b/packaging/mingw-debian-cross/patches/gettext-disable-tools
old mode 100644
new mode 100755
index 50b125d..70503f6
--- a/packaging/mingw-debian-cross/patches/gettext-disable-tools
+++ b/packaging/mingw-debian-cross/patches/gettext-disable-tools
@@ -1,8 +1,8 @@
-diff -r 39dc3bef2ec7 Makefile.am
---- a/Makefile.am	Sun Feb 24 17:55:28 2013 +0100
-+++ b/Makefile.am	Sun Feb 24 18:10:24 2013 +0100
-@@ -20,7 +20,7 @@
- ACLOCAL = build-aux/fixaclocal @ACLOCAL@
+diff -r decc1317356a Makefile.am
+--- a/Makefile.am	Sun Nov 17 14:47:59 2013 +0100
++++ b/Makefile.am	Sun Nov 17 14:50:27 2013 +0100
+@@ -19,7 +19,7 @@
+ AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies
  ACLOCAL_AMFLAGS = -I m4
  
 -SUBDIRS = gnulib-local gettext-runtime gettext-tools
@@ -10,7 +10,7 @@ diff -r 39dc3bef2ec7 Makefile.am
  
  EXTRA_DIST = \
    version.sh DEPENDENCIES PACKAGING HACKING ChangeLog.0 autogen.sh \
-@@ -29,71 +29,17 @@
+@@ -28,10 +28,12 @@
    m4/libtool.m4
  
  # Additional dependencies for configure, due to the use of autoconf --trace.
@@ -19,74 +19,15 @@ diff -r 39dc3bef2ec7 Makefile.am
  
  # Verify that some files are the same.
  distcheck-hook:
--	cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in
--	cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot
--	cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed
--	cmp -s gettext-runtime/po/quot.sed gettext-tools/po/quot.sed
--	cmp -s gettext-runtime/po/en at quot.header gettext-tools/po/en at quot.header
--	cmp -s gettext-runtime/po/en at boldquot.header gettext-tools/po/en at boldquot.header
--	cmp -s gettext-runtime/po/insert-header.sin gettext-tools/po/insert-header.sin
--	cmp -s gettext-runtime/po/remove-potcdate.sin gettext-tools/po/remove-potcdate.sin
--	cmp -s gettext-runtime/po/remove-potcdate.sin gettext-tools/examples/po/remove-potcdate.sin
--	cmp -s gettext-runtime/m4/codeset.m4 gettext-tools/gnulib-m4/codeset.m4
--	cmp -s gettext-runtime/m4/fcntl-o.m4 gettext-tools/gnulib-m4/fcntl-o.m4
--	cmp -s gettext-runtime/m4/gettext.m4 gettext-tools/gnulib-m4/gettext.m4
--	cmp -s gettext-runtime/m4/glibc2.m4 gettext-tools/gnulib-m4/glibc2.m4
--	cmp -s gettext-runtime/m4/glibc21.m4 gettext-tools/gnulib-m4/glibc21.m4
--	cmp -s gettext-runtime/m4/iconv.m4 gettext-tools/gnulib-m4/iconv.m4
--	cmp -s gettext-runtime/m4/intdiv0.m4 gettext-tools/gnulib-m4/intdiv0.m4
--	cmp -s gettext-runtime/m4/intl.m4 gettext-tools/gnulib-m4/intl.m4
--	cmp -s gettext-runtime/m4/intldir.m4 gettext-tools/gnulib-m4/intldir.m4
--	cmp -s gettext-runtime/m4/intlmacosx.m4 gettext-tools/gnulib-m4/intlmacosx.m4
--	cmp -s gettext-runtime/m4/intmax.m4 gettext-tools/gnulib-m4/intmax.m4
--	cmp -s gettext-runtime/m4/inttypes-pri.m4 gettext-tools/gnulib-m4/inttypes-pri.m4
--	cmp -s gettext-runtime/m4/inttypes_h.m4 gettext-tools/gnulib-m4/inttypes_h.m4
--	cmp -s gettext-runtime/m4/lcmessage.m4 gettext-tools/gnulib-m4/lcmessage.m4
--	cmp -s gettext-runtime/m4/lock.m4 gettext-tools/gnulib-m4/lock.m4
--	cmp -s gettext-runtime/m4/longlong.m4 gettext-tools/gnulib-m4/longlong.m4
--	cmp -s gettext-runtime/m4/nls.m4 gettext-tools/gnulib-m4/nls.m4
--	cmp -s gettext-runtime/m4/po.m4 gettext-tools/gnulib-m4/po.m4
--	cmp -s gettext-runtime/m4/printf-posix.m4 gettext-tools/gnulib-m4/printf-posix.m4
--	cmp -s gettext-runtime/m4/progtest.m4 gettext-tools/gnulib-m4/progtest.m4
--	cmp -s gettext-runtime/m4/size_max.m4 gettext-tools/gnulib-m4/size_max.m4
--	cmp -s gettext-runtime/m4/stdint_h.m4 gettext-tools/gnulib-m4/stdint_h.m4
--	cmp -s gettext-runtime/m4/threadlib.m4 gettext-tools/gnulib-m4/threadlib.m4
--	cmp -s gettext-runtime/m4/uintmax_t.m4 gettext-tools/gnulib-m4/uintmax_t.m4
--	cmp -s gettext-runtime/m4/visibility.m4 gettext-tools/gnulib-m4/visibility.m4
--	cmp -s gettext-runtime/m4/wchar_t.m4 gettext-tools/gnulib-m4/wchar_t.m4
--	cmp -s gettext-runtime/m4/wint_t.m4 gettext-tools/gnulib-m4/wint_t.m4
--	cmp -s gettext-runtime/m4/xsize.m4 gettext-tools/gnulib-m4/xsize.m4
--	test "`sed 1,19d gettext-runtime/intl/config.charset | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/config.charset | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/localcharset.h | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/localcharset.h | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/localcharset.c | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/localcharset.c | md5sum`"
--	test "`sed 1,17d gettext-runtime/intl/localename.c | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/localename.c | md5sum`"
--	test "`sed 1,17d gettext-runtime/intl/lock.h | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/glthread/lock.h | md5sum`"
--	test "`sed 1,17d gettext-runtime/intl/lock.c | md5sum`" = "`sed -e 1,16d -e 's,glthread/,,g' gettext-tools/gnulib-lib/glthread/lock.c | md5sum`"
- 	cmp -s gettext-runtime/intl/printf-args.h gettext-runtime/libasprintf/printf-args.h
- 	cmp -s gettext-runtime/intl/printf-args.c gettext-runtime/libasprintf/printf-args.c
- 	cmp -s gettext-runtime/intl/printf-parse.h gettext-runtime/libasprintf/printf-parse.h
- 	cmp -s gettext-runtime/intl/printf-parse.c gettext-runtime/libasprintf/printf-parse.c
--	test "`sed 1,18d gettext-runtime/intl/ref-add.sin | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/ref-add.sin | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/ref-del.sin | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/ref-del.sin | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/relocatable.h | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/relocatable.h | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/relocatable.c | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/relocatable.c | md5sum`"
- 	cmp -s gettext-runtime/intl/vasnprintf.h gettext-runtime/libasprintf/vasnprintf.h
--	test "`sed 1,18d gettext-runtime/intl/vasnprintf.c | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/vasnprintf.c | md5sum`"
- 	cmp -s gettext-runtime/intl/vasnprintf.c gettext-runtime/libasprintf/vasnprintf.c
- 	cmp -s gettext-runtime/intl/xsize.h gettext-runtime/libasprintf/xsize.h
--	test "`sed 1,18d gettext-runtime/intl/xsize.h | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/xsize.h | md5sum`"
--	cmp -s gettext-runtime/man/help2man gettext-tools/man/help2man
--	cmp -s gettext-runtime/man/x-to-1.in gettext-tools/man/x-to-1.in
--	cmp -s gettext-runtime/libasprintf/texi2html gettext-tools/doc/texi2html
--	cmp -s gettext-tools/examples/hello-java-awt/m4/TestAWT.java gettext-tools/examples/hello-java-swing/m4/TestAWT.java
--	cmp -s gettext-tools/examples/hello-java-awt/m4/TestAWT.class gettext-tools/examples/hello-java-swing/m4/TestAWT.class
- 	test "`sed 1,15d gnulib-local/lib/alloca.in.h | md5sum`" = "`sed 1,15d gettext-runtime/libasprintf/alloca.in.h | md5sum`"
- 
- # DJGPP port.
-diff -r eacf36bf5209 Makefile.in
---- a/Makefile.in	Sun Feb 24 18:15:10 2013 +0100
-+++ b/Makefile.in	Sun Feb 24 18:26:17 2013 +0100
-@@ -211,7 +211,7 @@
++
++distcheck-hook-disable:
+ 	cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in
+ 	cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot
+ 	cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed
+diff -r decc1317356a Makefile.in
+--- a/Makefile.in	Sun Nov 17 14:47:59 2013 +0100
++++ b/Makefile.in	Sun Nov 17 14:50:27 2013 +0100
+@@ -298,7 +298,7 @@
  top_srcdir = @top_srcdir@
  AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies
  ACLOCAL_AMFLAGS = -I m4
@@ -95,76 +36,12 @@ diff -r eacf36bf5209 Makefile.in
  
  # DJGPP port.
  
-@@ -697,71 +697,17 @@
- 
- 
- # Additional dependencies for configure, due to the use of autoconf --trace.
--$(srcdir)/configure: $(srcdir)/gettext-runtime/configure.ac $(srcdir)/gettext-tools/configure.ac 
-+$(srcdir)/configure: $(srcdir)/gettext-runtime/configure.ac 
+@@ -769,6 +769,8 @@
  
  # Verify that some files are the same.
  distcheck-hook:
--	cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in
--	cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot
--	cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed
--	cmp -s gettext-runtime/po/quot.sed gettext-tools/po/quot.sed
--	cmp -s gettext-runtime/po/en at quot.header gettext-tools/po/en at quot.header
--	cmp -s gettext-runtime/po/en at boldquot.header gettext-tools/po/en at boldquot.header
--	cmp -s gettext-runtime/po/insert-header.sin gettext-tools/po/insert-header.sin
--	cmp -s gettext-runtime/po/remove-potcdate.sin gettext-tools/po/remove-potcdate.sin
--	cmp -s gettext-runtime/po/remove-potcdate.sin gettext-tools/examples/po/remove-potcdate.sin
--	cmp -s gettext-runtime/m4/codeset.m4 gettext-tools/gnulib-m4/codeset.m4
--	cmp -s gettext-runtime/m4/fcntl-o.m4 gettext-tools/gnulib-m4/fcntl-o.m4
--	cmp -s gettext-runtime/m4/gettext.m4 gettext-tools/gnulib-m4/gettext.m4
--	cmp -s gettext-runtime/m4/glibc2.m4 gettext-tools/gnulib-m4/glibc2.m4
--	cmp -s gettext-runtime/m4/glibc21.m4 gettext-tools/gnulib-m4/glibc21.m4
--	cmp -s gettext-runtime/m4/iconv.m4 gettext-tools/gnulib-m4/iconv.m4
--	cmp -s gettext-runtime/m4/intdiv0.m4 gettext-tools/gnulib-m4/intdiv0.m4
--	cmp -s gettext-runtime/m4/intl.m4 gettext-tools/gnulib-m4/intl.m4
--	cmp -s gettext-runtime/m4/intldir.m4 gettext-tools/gnulib-m4/intldir.m4
--	cmp -s gettext-runtime/m4/intlmacosx.m4 gettext-tools/gnulib-m4/intlmacosx.m4
--	cmp -s gettext-runtime/m4/intmax.m4 gettext-tools/gnulib-m4/intmax.m4
--	cmp -s gettext-runtime/m4/inttypes-pri.m4 gettext-tools/gnulib-m4/inttypes-pri.m4
--	cmp -s gettext-runtime/m4/inttypes_h.m4 gettext-tools/gnulib-m4/inttypes_h.m4
--	cmp -s gettext-runtime/m4/lcmessage.m4 gettext-tools/gnulib-m4/lcmessage.m4
--	cmp -s gettext-runtime/m4/lock.m4 gettext-tools/gnulib-m4/lock.m4
--	cmp -s gettext-runtime/m4/longlong.m4 gettext-tools/gnulib-m4/longlong.m4
--	cmp -s gettext-runtime/m4/nls.m4 gettext-tools/gnulib-m4/nls.m4
--	cmp -s gettext-runtime/m4/po.m4 gettext-tools/gnulib-m4/po.m4
--	cmp -s gettext-runtime/m4/printf-posix.m4 gettext-tools/gnulib-m4/printf-posix.m4
--	cmp -s gettext-runtime/m4/progtest.m4 gettext-tools/gnulib-m4/progtest.m4
--	cmp -s gettext-runtime/m4/size_max.m4 gettext-tools/gnulib-m4/size_max.m4
--	cmp -s gettext-runtime/m4/stdint_h.m4 gettext-tools/gnulib-m4/stdint_h.m4
--	cmp -s gettext-runtime/m4/threadlib.m4 gettext-tools/gnulib-m4/threadlib.m4
--	cmp -s gettext-runtime/m4/uintmax_t.m4 gettext-tools/gnulib-m4/uintmax_t.m4
--	cmp -s gettext-runtime/m4/visibility.m4 gettext-tools/gnulib-m4/visibility.m4
--	cmp -s gettext-runtime/m4/wchar_t.m4 gettext-tools/gnulib-m4/wchar_t.m4
--	cmp -s gettext-runtime/m4/wint_t.m4 gettext-tools/gnulib-m4/wint_t.m4
--	cmp -s gettext-runtime/m4/xsize.m4 gettext-tools/gnulib-m4/xsize.m4
--	test "`sed 1,19d gettext-runtime/intl/config.charset | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/config.charset | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/localcharset.h | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/localcharset.h | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/localcharset.c | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/localcharset.c | md5sum`"
--	test "`sed 1,17d gettext-runtime/intl/localename.c | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/localename.c | md5sum`"
--	test "`sed 1,17d gettext-runtime/intl/lock.h | md5sum`" = "`sed 1,16d gettext-tools/gnulib-lib/glthread/lock.h | md5sum`"
--	test "`sed 1,17d gettext-runtime/intl/lock.c | md5sum`" = "`sed -e 1,16d -e 's,glthread/,,g' gettext-tools/gnulib-lib/glthread/lock.c | md5sum`"
- 	cmp -s gettext-runtime/intl/printf-args.h gettext-runtime/libasprintf/printf-args.h
- 	cmp -s gettext-runtime/intl/printf-args.c gettext-runtime/libasprintf/printf-args.c
- 	cmp -s gettext-runtime/intl/printf-parse.h gettext-runtime/libasprintf/printf-parse.h
- 	cmp -s gettext-runtime/intl/printf-parse.c gettext-runtime/libasprintf/printf-parse.c
--	test "`sed 1,18d gettext-runtime/intl/ref-add.sin | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/ref-add.sin | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/ref-del.sin | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/ref-del.sin | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/relocatable.h | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/relocatable.h | md5sum`"
--	test "`sed 1,18d gettext-runtime/intl/relocatable.c | md5sum`" = "`sed 1,18d gettext-tools/gnulib-lib/relocatable.c | md5sum`"
- 	cmp -s gettext-runtime/intl/vasnprintf.h gettext-runtime/libasprintf/vasnprintf.h
--	test "`sed 1,18d gettext-runtime/intl/vasnprintf.c | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/vasnprintf.c | md5sum`"
- 	cmp -s gettext-runtime/intl/vasnprintf.c gettext-runtime/libasprintf/vasnprintf.c
- 	cmp -s gettext-runtime/intl/xsize.h gettext-runtime/libasprintf/xsize.h
--	test "`sed 1,18d gettext-runtime/intl/xsize.h | md5sum`" = "`sed 1,17d gettext-tools/gnulib-lib/xsize.h | md5sum`"
--	cmp -s gettext-runtime/man/help2man gettext-tools/man/help2man
--	cmp -s gettext-runtime/man/x-to-1.in gettext-tools/man/x-to-1.in
--	cmp -s gettext-runtime/libasprintf/texi2html gettext-tools/doc/texi2html
--	cmp -s gettext-tools/examples/hello-java-awt/m4/TestAWT.java gettext-tools/examples/hello-java-swing/m4/TestAWT.java
--	cmp -s gettext-tools/examples/hello-java-awt/m4/TestAWT.class gettext-tools/examples/hello-java-swing/m4/TestAWT.class
- 	test "`sed 1,15d gnulib-local/lib/alloca.in.h | md5sum`" = "`sed 1,15d gettext-runtime/libasprintf/alloca.in.h | md5sum`"
- 
- # Tell versions [3.59,3.63) of GNU make to not export all variables.
++
++distcheck-hook-disable:
+ 	cmp -s gettext-runtime/po/Makefile.in.in gettext-tools/po/Makefile.in.in
+ 	cmp -s gettext-runtime/po/Rules-quot gettext-tools/po/Rules-quot
+ 	cmp -s gettext-runtime/po/boldquot.sed gettext-tools/po/boldquot.sed
diff --git a/packaging/mingw-debian-cross/patches/gettext-win32-prefix b/packaging/mingw-debian-cross/patches/gettext-win32-prefix
old mode 100644
new mode 100755
diff --git a/packaging/mingw-debian-cross/patches/glew-makefile b/packaging/mingw-debian-cross/patches/glew-makefile
old mode 100644
new mode 100755
index 4262a54..bb5c626
--- a/packaging/mingw-debian-cross/patches/glew-makefile
+++ b/packaging/mingw-debian-cross/patches/glew-makefile
@@ -10,7 +10,7 @@
  SHELL = /bin/sh
 -SYSTEM ?= $(shell config/config.guess | cut -d - -f 3 | sed -e 's/[0-9\.]//g;')
 -SYSTEM.SUPPORTED = $(shell test -f config/Makefile.$(SYSTEM) && echo 1)
-+SYSTEM = HOST_VAL
++SYSTEM = i686-w64-mingw32
  
 -ifeq ($(SYSTEM.SUPPORTED), 1)
 -include config/Makefile.$(SYSTEM)
@@ -19,7 +19,7 @@
 -endif
 -
 -GLEW_DEST ?= /usr
-+GLEW_DEST ?= BASEDIR
++GLEW_DEST ?= /home/pcuser/mingw32
  BINDIR ?= $(GLEW_DEST)/bin
  LIBDIR ?= $(GLEW_DEST)/lib
  INCDIR ?= $(GLEW_DEST)/include/GL
diff --git a/packaging/mingw-debian-cross/patches/glew-makefile b/packaging/mingw-debian-cross/patches/glew-makefile.base
similarity index 100%
copy from packaging/mingw-debian-cross/patches/glew-makefile
copy to packaging/mingw-debian-cross/patches/glew-makefile.base
diff --git a/packaging/mingw-debian-cross/patches/gsl-config.patch b/packaging/mingw-debian-cross/patches/gsl-config.patch
old mode 100644
new mode 100755
diff --git a/packaging/mingw-debian-cross/patches/mathgl-disable-widgets b/packaging/mingw-debian-cross/patches/mathgl-disable-widgets
new file mode 100644
index 0000000..db65572
--- /dev/null
+++ b/packaging/mingw-debian-cross/patches/mathgl-disable-widgets
@@ -0,0 +1,10 @@
+diff -r 87e795f6a771 Makefile.am
+--- a/Makefile.am	Sat Nov 16 16:45:55 2013 +0100
++++ b/Makefile.am	Sat Nov 16 16:46:30 2013 +0100
+@@ -1,5 +1,5 @@
+ ACLOCAL_AMFLAGS = -I config
+-SUBDIRS = mgl lang widgets utils examples include
++SUBDIRS = mgl lang utils include
+ 
+ doctargets =
+ 
diff --git a/packaging/mingw-debian-cross/patches/wxwidgets2.8-wx-config-sysroot.patch b/packaging/mingw-debian-cross/patches/wx-config-sysroot.patch
similarity index 100%
rename from packaging/mingw-debian-cross/patches/wxwidgets2.8-wx-config-sysroot.patch
rename to packaging/mingw-debian-cross/patches/wx-config-sysroot.patch
diff --git a/packaging/mingw-debian-cross/patches/wx-jpeg-patch b/packaging/mingw-debian-cross/patches/wx-jpeg-patch
new file mode 100644
index 0000000..09a75dd
--- /dev/null
+++ b/packaging/mingw-debian-cross/patches/wx-jpeg-patch
@@ -0,0 +1,12 @@
+diff -r 0d1de5a122f4 src/common/imagjpeg.cpp
+--- a/src/common/imagjpeg.cpp	Sat Nov 16 00:10:29 2013 +0100
++++ b/src/common/imagjpeg.cpp	Sat Nov 16 00:11:02 2013 +0100
+@@ -46,7 +46,7 @@
+ }
+ 
+ #ifndef HAVE_WXJPEG_BOOLEAN
+-typedef boolean wxjpeg_boolean;
++typedef jpeg_boolean wxjpeg_boolean;
+ #endif
+ 
+ #include "wx/filefn.h"
diff --git a/packaging/mingw-debian-cross/patches/wxwidgets2.8-2.8.12-mingw64-1.patch b/packaging/mingw-debian-cross/patches/wxWidgets-2.8.12-mingw64-1.patch
similarity index 100%
rename from packaging/mingw-debian-cross/patches/wxwidgets2.8-2.8.12-mingw64-1.patch
rename to packaging/mingw-debian-cross/patches/wxWidgets-2.8.12-mingw64-1.patch
diff --git a/packaging/mingw-debian-cross/patches/zlib-no-lc.patch b/packaging/mingw-debian-cross/patches/zlib-no-lc.patch
old mode 100644
new mode 100755
diff --git a/packaging/mingw-debian-cross/windows-installer.nsi b/packaging/mingw-debian-cross/windows-installer.nsi
old mode 100644
new mode 100755
index 08d51a8..1af8a14
--- a/packaging/mingw-debian-cross/windows-installer.nsi
+++ b/packaging/mingw-debian-cross/windows-installer.nsi
@@ -2,7 +2,7 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "3Depict"
-!define PRODUCT_VERSION "0.0.14"
+!define PRODUCT_VERSION "0.0.15"
 !define PRODUCT_PUBLISHER "D. Haley, A. Ceguerra"
 !define PRODUCT_WEB_SITE "http://threedepict.sourceforge.net"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\3Depict.exe"
@@ -48,31 +48,8 @@ Section "3Depict program" SEC01
   SetOutPath "$INSTDIR"
   SetOverwrite ifnewer
   File "src\3Depict.exe"
-  File "src\wxmsw28u_richtext_gcc_custom.dll"
-  File "src\wxmsw28u_qa_gcc_custom.dll"
-  File "src\wxmsw28u_html_gcc_custom.dll"
-  File "src\wxmsw28u_gl_gcc_custom.dll"
-  File "src\wxmsw28u_core_gcc_custom.dll"
-  File "src\wxmsw28u_aui_gcc_custom.dll"
-  File "src\wxmsw28u_adv_gcc_custom.dll"
-  File "src\wxbase28u_xml_gcc_custom.dll"
-  File "src\wxbase28u_net_gcc_custom.dll"
-  File "src\wxbase28u_gcc_custom.dll"
-  File "src\libxml2-2.dll"
-  File "src\libgslcblas-0.dll"
-  File "src\libgsl-0.dll"
-  File "src\libfreetype-6.dll"
-  File "src\libintl-8.dll"
-  File "src\libiconv-2.dll"
-  File "src\libexpat-1.dll"
-  File "src\libjpeg-8.dll"
-  File "src\libpng12-0.dll"
-  File "src\libtiff-4.dll"
-  File "src\libz.dll"
-  File "src\libstdc++-6.dll"
-  File "src\libmgl-5.dll"
-  File "src\libgcc_s_sjlj-1.dll"
   File "docs\manual-latex\manual.pdf"
+  ;INSERT_DLLS_HERE
 
   CreateDirectory "$SMPROGRAMS\3Depict"
   CreateDirectory "$SMPROGRAMS\3Depict\textures"
@@ -103,6 +80,14 @@ Section "3Depict program" SEC01
   File "data\textures\Right_clicked_mouse.png"
   File "data\textures\rotateArrow.png"
   File "data\textures\scroll_wheel_mouse.png"
+  File "data/3Depict.xpm"
+  File "data/atomic-mass-table.dtd"
+  File "data/checked_dis.xpm"
+  File "data/checked.xpm"
+  File "data/naturalAbundance.xml"
+  File "data/startup-tips.txt"
+  File "data/unchecked_dis.xpm"
+  File "data/unchecked.xpm"
 SectionEnd
 
 Section -AdditionalIcons
@@ -153,6 +138,15 @@ Section Uninstall
   Delete "$INSTDIR\textures\keyboard-command.png"
   Delete "$INSTDIR\textures\keyboard-alt.png"
   Delete "$INSTDIR\textures\enlarge.png"
+  
+  Delete "$INSTDIR/3Depict.xpm"
+  Delete "$INSTDIR/atomic-mass-table.dtd"
+  Delete "$INSTDIR/checked_dis.xpm"
+  Delete "$INSTDIR/checked.xpm"
+  Delete "$INSTDIR/naturalAbundance.xml"
+  Delete "$INSTDIR/startup-tips.txt"
+  Delete "$INSTDIR/unchecked_dis.xpm"
+  Delete "$INSTDIR/unchecked.xpm"
  
   Delete "$INSTDIR\3Depict.exe"
 
@@ -160,30 +154,8 @@ Section Uninstall
   RMDir /r "$INSTDIR\locales\*.*"
   RMDir "$INSTDIR\locales"
 
-  Delete "$INSTDIR\wxmsw28u_richtext_gcc_custom.dll"
-  Delete "$INSTDIR\wxmsw28u_qa_gcc_custom.dll"
-  Delete "$INSTDIR\wxmsw28u_html_gcc_custom.dll"
-  Delete "$INSTDIR\wxmsw28u_gl_gcc_custom.dll"
-  Delete "$INSTDIR\wxmsw28u_core_gcc_custom.dll"
-  Delete "$INSTDIR\wxmsw28u_aui_gcc_custom.dll"
-  Delete "$INSTDIR\wxmsw28u_adv_gcc_custom.dll"
-  Delete "$INSTDIR\wxbase28u_xml_gcc_custom.dll"
-  Delete "$INSTDIR\wxbase28u_net_gcc_custom.dll"
-  Delete "$INSTDIR\wxbase28u_gcc_custom.dll"
-  Delete "$INSTDIR\libxml2-2.dll"
-  Delete "$INSTDIR\libgslcblas-0.dll"
-  Delete "$INSTDIR\libgsl-0.dll"
-  Delete "$INSTDIR\libfreetype-6.dll"
-  Delete "$INSTDIR\libintl-8.dll"
-  Delete "$INSTDIR\libiconv-2.dll"
-  Delete "$INSTDIR\libexpat-1.dll"
-  Delete "$INSTDIR\libjpeg-8.dll"
-  Delete "$INSTDIR\libpng12-0.dll"
-  Delete "$INSTDIR\libtiff-4.dll"
-  Delete "$INSTDIR\libz.dll"
-  Delete "$INSTDIR\libstdc++-6.dll"
-  Delete "$INSTDIR\libmgl-5.dll"
-  Delete "$INSTDIR\libgcc_s_sjlj-1.dll"
+  ;This is a token that should be replaced with the DLLS to uninstall
+  ;INSERT_UNINST_DLLS_HERE
 
   Delete "$INSTDIR\uninst.exe"  
  
diff --git a/src/3Depict.cpp b/src/3Depict.cpp
index 98a5267..8681cf3 100644
--- a/src/3Depict.cpp
+++ b/src/3Depict.cpp
@@ -30,7 +30,7 @@
 #include "gui/mainFrame.h"
 
 //Unit testing code
-#include "testing.h"
+#include "testing/testing.h"
 
 enum
 {
@@ -119,8 +119,9 @@ threeDepictApp::threeDepictApp()
 {
        	MainFrame=0;usrLocale=0;
 #ifndef DEBUG
-#if wxCHECK_VERSION(2,9,0) && defined(__APPLE__)
-	//Macports wx seems to be built with assertions enabled? Disable for release builds
+#if wxCHECK_VERSION(2,9,0)
+	//Wx 2.9 and up now has assertions auto-enabled. 
+	//Disable for release builds
 	wxSetAssertHandler(NULL);
 #endif
 #endif
@@ -216,7 +217,14 @@ int threeDepictApp::FilterEvent(wxEvent& event)
 	//Process global keyboard (non-accelerator) events
 	if ( event.GetEventType()==wxEVT_KEY_DOWN )
 	{
-		if(MainFrame)
+		bool mainActive;
+#ifdef __APPLE__
+		mainActive=true; //Any way to actually get this?? wxGetActiveWindow() apparently returns null here.
+#else
+		mainActive =( wxGetTopLevelParent((wxWindow*)(wxGetActiveWindow())) == (wxWindow*)MainFrame);
+#endif
+	
+		if(MainFrame && mainActive)
 		{
 			wxKeyEvent& keyEvent = (wxKeyEvent&)event;
 			//Under GTK, escape aborts refresh. under mac, 
diff --git a/src/Makefile.am b/src/Makefile.am
index c1c14ee..8e63f0a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,9 +1,7 @@
 MSYS_PATH=/c/msys/1.0/local/include/
 
-.rc.o:
+%.rc.o: 
 	$(WX_RESCOMP) $^ -o $@
-%.o : %.rc
-	 $(WX_RESCOMP) $^ -o $@
 
 3Depict_LDFLAGS=$(LDFLAGS) $(FT_LDFLAGS) $(GSL_LIBS) $(MGL_LIBS)
 
@@ -15,9 +13,9 @@ MSYS_PATH=/c/msys/1.0/local/include/
 	       $(XML_CFLAGS) $(GSL_CFLAGS)  $(MGL_CFLAGS) $(PNG_CFLAGS) $(QHULL_CFLAGS) \
 	      $(OPENMP_FLAGS) $(DEBUG_FLAGS) -pipe
 
-
 3Depict_LDADD=$(LIBS) $(GETTEXT_LIBS) $(WX_LIBS) $(MGL_LIBS)  $(FTGL_LIBS) \
-		 $(FT_LIBS) $(XML_LIBS) $(GSL_LIBS) $(GL_LIBS) $(GLU_LIBS) $(QHULL_LIBS) $(PNG_LIBS) 
+		 $(FT_LIBS) $(XML_LIBS) $(GSL_LIBS) $(GL_LIBS) $(GLU_LIBS) $(QHULL_LIBS) $(PNG_LIBS)
+
 
 bin_PROGRAMS= 3Depict
 
@@ -37,7 +35,8 @@ FILTER_FILES = backend/filters/allFilter.cpp backend/filters/filterCommon.cpp \
 		backend/filters/ionColour.cpp backend/filters/boundingBox.cpp  \
 		backend/filters/compositionProfile.cpp backend/filters/spatialAnalysis.cpp \
 		backend/filters/clusterAnalysis.cpp backend/filters/ionInfo.cpp \
-		backend/filters/annotation.cpp backend/filters/geometryHelpers.cpp
+		backend/filters/annotation.cpp backend/filters/geometryHelpers.cpp \
+		backend/filters/algorithms/binomial.cpp 
 
 FILTER_HEADER_FILES = backend/filters/allFilter.h backend/filters/filterCommon.h \
 		backend/filters/dataLoad.h backend/filters/ionDownsample.h \
@@ -46,28 +45,27 @@ FILTER_HEADER_FILES = backend/filters/allFilter.h backend/filters/filterCommon.h
 		backend/filters/ionColour.h backend/filters/boundingBox.h  \
 		backend/filters/compositionProfile.h backend/filters/spatialAnalysis.h \
 		backend/filters/clusterAnalysis.h backend/filters/ionInfo.h \
-		backend/filters/annotation.h backend/filters/geometryHelpers.h
+		backend/filters/annotation.h backend/filters/geometryHelpers.h \
+		backend/filters/algorithms/binomial.h
 
 BACKEND_SOURCE_FILES = backend/animator.cpp backend/filtertreeAnalyse.cpp backend/filtertree.cpp \
-		     	backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp \
-			backend/filters/K3DTree.cpp backend/filters/K3DTree-mk2.cpp\
-			backend/filter.cpp backend/filters/rdf.cpp \
+		     	backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp backend/APT/abundanceParser.cpp \
+			backend/filters/algorithms/K3DTree.cpp backend/filters/algorithms/K3DTree-mk2.cpp\
+			backend/filter.cpp backend/filters/algorithms/rdf.cpp \
 		       backend/viscontrol.cpp backend/state.cpp backend/plot.cpp  backend/configFile.cpp 
 
 BACKEND_HEADER_FILES =  backend/animator.h backend/filtertreeAnalyse.h backend/filtertree.h\
-			backend/APT/ionhit.h backend/APT/APTFileIO.h backend/APT/APTRanges.h \
-			backend/filters/K3DTree.h backend/filters/K3DTree-mk2.h \
-			backend/filter.h backend/filters/rdf.h \
+			backend/APT/ionhit.h backend/APT/APTFileIO.h backend/APT/APTRanges.h backend/APT/abundanceParser.h \
+			backend/filters/algorithms/K3DTree.h backend/filters/algorithms/K3DTree-mk2.h \
+			backend/filter.h backend/filters/algorithms/rdf.h \
 			backend/viscontrol.h backend/state.h backend/plot.h backend/configFile.h \
 		        backend/tree.hh
 
 #------------
 
 #------------ OpenGL interface files
-OPENGL_HEADER_FILES = gl/scene.h gl/drawables.h gl/effect.h gl/textures.h gl/select.h gl/cameras.h gl/isoSurface.h
-OPENGL_SOURCE_FILES =  gl/scene.cpp gl/drawables.cpp gl/effect.cpp gl/textures.cpp gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp
-
-
+OPENGL_HEADER_FILES = gl/scene.h gl/drawables.h gl/effect.h gl/textures.h gl/select.h gl/cameras.h gl/isoSurface.h gl/tr.h gl/glDebug.h
+OPENGL_SOURCE_FILES =  gl/scene.cpp gl/drawables.cpp gl/effect.cpp gl/textures.cpp gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp gl/tr.cpp
 #------------
 
 
@@ -79,7 +77,8 @@ DIALOG_SOURCE_FILES = gui/dialogs/ExportPos.cpp  gui/dialogs/ExportRngDialog.cpp
 		gui/dialogs/animateFilterDialog.cpp \
 		gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp \
 		gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp \
-		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp \
+		gui/dialogs/rangeEditDialog.cpp
 
 
 DIALOG_HEADER_FILES = gui/dialogs/ExportPos.h gui/dialogs/ExportRngDialog.h gui/dialogs/prefDialog.h \
@@ -89,13 +88,14 @@ DIALOG_HEADER_FILES = gui/dialogs/ExportPos.h gui/dialogs/ExportRngDialog.h gui/
 		gui/dialogs/animateSubDialogs/realKeyFrameDialog.h \
 		gui/dialogs/animateSubDialogs/colourKeyFrameDialog.h \
 		gui/dialogs/animateSubDialogs/stringKeyFrameDialog.h \
-		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.h
+		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.h \
+		gui/dialogs/rangeEditDialog.h
 
 GUI_SOURCE_FILES=gui/mainFrame.cpp gui/mathglPane.cpp gui/cropPanel.cpp gui/glPane.cpp  $(DIALOG_SOURCE_FILES)
 GUI_HEADER_FILES=gui/mainFrame.h gui/mathglPane.h gui/cropPanel.h gui/art.h gui/glPane.h $(DIALOG_HEADER_FILES)
 
-BASE_SOURCE_FILES=   3Depict.cpp testing.cpp  wxcomponents.cpp wxcommon.cpp winconsole.cpp 
-BASE_HEADER_FILES=   testing.h winconsole.h   wxcomponents.h  wxcommon.h
+BASE_SOURCE_FILES=   3Depict.cpp testing/testing.cpp  wx/wxcomponents.cpp wx/wxcommon.cpp winconsole.cpp 
+BASE_HEADER_FILES=   testing/testing.h winconsole.h   wx/wxcomponents.h  wx/wxcommon.h 
 #-----------
 
 
@@ -105,15 +105,15 @@ SOURCE_FILES=  $(BASE_SOURCE_FILES) $(BASE_HEADER_FILES) $(GUI_SOURCE_FILES) $(G
 	       ${BACKEND_SOURCE_FILES} ${BACKEND_HEADER_FILES} $(OPENGL_SOURCE_FILES) $(OPENGL_HEADER_FILES) \
 	       $(COMMON_SOURCE_FILES) $(COMMON_HEADER_FILES)
 
+3Depict_SOURCES=$(SOURCE_FILES)
 
 #Do we have or need windows-XP "resource" files for look and feel?
 if HAVE_WINDRES
-3Depict_SOURCES=$(SOURCE_FILES)  3Depict.rc
-else
-3Depict_SOURCES=$(SOURCE_FILES)
+3Depict_SOURCES+=3Depict.rc
+3Depict_LDADD+= 3Depict.rc.o
 endif
 
 #Tarball options
-EXTRA_DIST = gui/glade-skeleton myAppIcon.ico
+EXTRA_DIST = gui/glade-skeleton myAppIcon.ico testing/filtertesting.cpp
  
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 38e0231..2b5d5fb 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,23 +15,51 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__make_dryrun = \
-  { \
-    am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
     case $$MAKEFLAGS in \
       *\\[\ \	]*) \
-        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
-          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
-      *) \
-        for am__flg in $$MAKEFLAGS; do \
-          case $$am__flg in \
-            *=*|--*) ;; \
-            *n*) am__dry=yes; break;; \
-          esac; \
-        done;; \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
     esac; \
-    test $$am__dry = yes; \
-  }
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -52,8 +79,13 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 bin_PROGRAMS = 3Depict$(EXEEXT)
+
+#Do we have or need windows-XP "resource" files for look and feel?
+ at HAVE_WINDRES_TRUE@am__append_1 = 3Depict.rc
+ at HAVE_WINDRES_TRUE@am__append_2 = 3Depict.rc.o
 subdir = src
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ftgl.m4 $(top_srcdir)/m4/gsl.m4 \
 	$(top_srcdir)/m4/wxwin.m4 $(top_srcdir)/acinclude.m4 \
@@ -66,10 +98,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am__3Depict_SOURCES_DIST = 3Depict.cpp testing.cpp wxcomponents.cpp \
-	wxcommon.cpp winconsole.cpp testing.h winconsole.h \
-	wxcomponents.h wxcommon.h gui/mainFrame.cpp gui/mathglPane.cpp \
-	gui/cropPanel.cpp gui/glPane.cpp gui/dialogs/ExportPos.cpp \
+am__3Depict_SOURCES_DIST = 3Depict.cpp testing/testing.cpp \
+	wx/wxcomponents.cpp wx/wxcommon.cpp winconsole.cpp \
+	testing/testing.h winconsole.h wx/wxcomponents.h wx/wxcommon.h \
+	gui/mainFrame.cpp gui/mathglPane.cpp gui/cropPanel.cpp \
+	gui/glPane.cpp gui/dialogs/ExportPos.cpp \
 	gui/dialogs/ExportRngDialog.cpp gui/dialogs/prefDialog.cpp \
 	gui/dialogs/resolutionDialog.cpp gui/dialogs/StashDialog.cpp \
 	gui/dialogs/autosaveDialog.cpp \
@@ -78,18 +111,20 @@ am__3Depict_SOURCES_DIST = 3Depict.cpp testing.cpp wxcomponents.cpp \
 	gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp \
 	gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp \
 	gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp \
-	gui/mainFrame.h gui/mathglPane.h gui/cropPanel.h gui/art.h \
-	gui/glPane.h gui/dialogs/ExportPos.h \
-	gui/dialogs/ExportRngDialog.h gui/dialogs/prefDialog.h \
-	gui/dialogs/StashDialog.h gui/dialogs/resolutionDialog.h \
-	gui/dialogs/autosaveDialog.h gui/dialogs/filterErrorDialog.h \
+	gui/dialogs/rangeEditDialog.cpp gui/mainFrame.h \
+	gui/mathglPane.h gui/cropPanel.h gui/art.h gui/glPane.h \
+	gui/dialogs/ExportPos.h gui/dialogs/ExportRngDialog.h \
+	gui/dialogs/prefDialog.h gui/dialogs/StashDialog.h \
+	gui/dialogs/resolutionDialog.h gui/dialogs/autosaveDialog.h \
+	gui/dialogs/filterErrorDialog.h \
 	gui/dialogs/animateFilterDialog.h \
 	gui/dialogs/animateSubDialogs/realKeyFrameDialog.h \
 	gui/dialogs/animateSubDialogs/colourKeyFrameDialog.h \
 	gui/dialogs/animateSubDialogs/stringKeyFrameDialog.h \
 	gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.h \
-	backend/filters/allFilter.cpp backend/filters/filterCommon.cpp \
-	backend/filters/dataLoad.cpp backend/filters/ionDownsample.cpp \
+	gui/dialogs/rangeEditDialog.h backend/filters/allFilter.cpp \
+	backend/filters/filterCommon.cpp backend/filters/dataLoad.cpp \
+	backend/filters/ionDownsample.cpp \
 	backend/filters/rangeFile.cpp backend/filters/voxelise.cpp \
 	backend/filters/spectrumPlot.cpp backend/filters/transform.cpp \
 	backend/filters/externalProgram.cpp \
@@ -100,6 +135,7 @@ am__3Depict_SOURCES_DIST = 3Depict.cpp testing.cpp wxcomponents.cpp \
 	backend/filters/clusterAnalysis.cpp \
 	backend/filters/ionInfo.cpp backend/filters/annotation.cpp \
 	backend/filters/geometryHelpers.cpp \
+	backend/filters/algorithms/binomial.cpp \
 	backend/filters/allFilter.h backend/filters/filterCommon.h \
 	backend/filters/dataLoad.h backend/filters/ionDownsample.h \
 	backend/filters/rangeFile.h backend/filters/voxelise.h \
@@ -110,81 +146,106 @@ am__3Depict_SOURCES_DIST = 3Depict.cpp testing.cpp wxcomponents.cpp \
 	backend/filters/spatialAnalysis.h \
 	backend/filters/clusterAnalysis.h backend/filters/ionInfo.h \
 	backend/filters/annotation.h backend/filters/geometryHelpers.h \
-	backend/animator.cpp backend/filtertreeAnalyse.cpp \
-	backend/filtertree.cpp backend/APT/ionhit.cpp \
-	backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp \
-	backend/filters/K3DTree.cpp backend/filters/K3DTree-mk2.cpp \
-	backend/filter.cpp backend/filters/rdf.cpp \
-	backend/viscontrol.cpp backend/state.cpp backend/plot.cpp \
-	backend/configFile.cpp backend/animator.h \
-	backend/filtertreeAnalyse.h backend/filtertree.h \
-	backend/APT/ionhit.h backend/APT/APTFileIO.h \
-	backend/APT/APTRanges.h backend/filters/K3DTree.h \
-	backend/filters/K3DTree-mk2.h backend/filter.h \
-	backend/filters/rdf.h backend/viscontrol.h backend/state.h \
-	backend/plot.h backend/configFile.h backend/tree.hh \
-	gl/scene.cpp gl/drawables.cpp gl/effect.cpp gl/textures.cpp \
-	gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp gl/scene.h \
-	gl/drawables.h gl/effect.h gl/textures.h gl/select.h \
-	gl/cameras.h gl/isoSurface.h common/pngread.c \
-	common/stringFuncs.cpp common/xmlHelper.cpp \
+	backend/filters/algorithms/binomial.h backend/animator.cpp \
+	backend/filtertreeAnalyse.cpp backend/filtertree.cpp \
+	backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp \
+	backend/APT/APTRanges.cpp backend/APT/abundanceParser.cpp \
+	backend/filters/algorithms/K3DTree.cpp \
+	backend/filters/algorithms/K3DTree-mk2.cpp backend/filter.cpp \
+	backend/filters/algorithms/rdf.cpp backend/viscontrol.cpp \
+	backend/state.cpp backend/plot.cpp backend/configFile.cpp \
+	backend/animator.h backend/filtertreeAnalyse.h \
+	backend/filtertree.h backend/APT/ionhit.h \
+	backend/APT/APTFileIO.h backend/APT/APTRanges.h \
+	backend/APT/abundanceParser.h \
+	backend/filters/algorithms/K3DTree.h \
+	backend/filters/algorithms/K3DTree-mk2.h backend/filter.h \
+	backend/filters/algorithms/rdf.h backend/viscontrol.h \
+	backend/state.h backend/plot.h backend/configFile.h \
+	backend/tree.hh gl/scene.cpp gl/drawables.cpp gl/effect.cpp \
+	gl/textures.cpp gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp \
+	gl/tr.cpp gl/scene.h gl/drawables.h gl/effect.h gl/textures.h \
+	gl/select.h gl/cameras.h gl/isoSurface.h gl/tr.h gl/glDebug.h \
+	common/pngread.c common/stringFuncs.cpp common/xmlHelper.cpp \
 	common/colourmap.cpp common/voxels.cpp common/mathfuncs.cpp \
 	common/basics.cpp common/pngread.h common/stringFuncs.h \
 	common/constants.h common/xmlHelper.h common/colourmap.h \
 	common/mathfuncs.h common/basics.h common/translation.h \
 	common/endianTest.h common/assertion.h common/voxels.h \
 	3Depict.rc
-am__objects_1 = 3Depict-3Depict.$(OBJEXT) 3Depict-testing.$(OBJEXT) \
-	3Depict-wxcomponents.$(OBJEXT) 3Depict-wxcommon.$(OBJEXT) \
-	3Depict-winconsole.$(OBJEXT)
+am__dirstamp = $(am__leading_dot)dirstamp
+am__objects_1 = 3Depict-3Depict.$(OBJEXT) \
+	testing/3Depict-testing.$(OBJEXT) \
+	wx/3Depict-wxcomponents.$(OBJEXT) \
+	wx/3Depict-wxcommon.$(OBJEXT) 3Depict-winconsole.$(OBJEXT)
 am__objects_2 =
-am__objects_3 = 3Depict-ExportPos.$(OBJEXT) \
-	3Depict-ExportRngDialog.$(OBJEXT) 3Depict-prefDialog.$(OBJEXT) \
-	3Depict-resolutionDialog.$(OBJEXT) \
-	3Depict-StashDialog.$(OBJEXT) 3Depict-autosaveDialog.$(OBJEXT) \
-	3Depict-filterErrorDialog.$(OBJEXT) \
-	3Depict-animateFilterDialog.$(OBJEXT) \
-	3Depict-colourKeyFrameDialog.$(OBJEXT) \
-	3Depict-stringKeyFrameDialog.$(OBJEXT) \
-	3Depict-choiceKeyFrameDialog.$(OBJEXT)
-am__objects_4 = 3Depict-mainFrame.$(OBJEXT) \
-	3Depict-mathglPane.$(OBJEXT) 3Depict-cropPanel.$(OBJEXT) \
-	3Depict-glPane.$(OBJEXT) $(am__objects_3)
+am__objects_3 = gui/dialogs/3Depict-ExportPos.$(OBJEXT) \
+	gui/dialogs/3Depict-ExportRngDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-prefDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-resolutionDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-StashDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-autosaveDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-filterErrorDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-animateFilterDialog.$(OBJEXT) \
+	gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.$(OBJEXT) \
+	gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.$(OBJEXT) \
+	gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.$(OBJEXT) \
+	gui/dialogs/3Depict-rangeEditDialog.$(OBJEXT)
+am__objects_4 = gui/3Depict-mainFrame.$(OBJEXT) \
+	gui/3Depict-mathglPane.$(OBJEXT) \
+	gui/3Depict-cropPanel.$(OBJEXT) gui/3Depict-glPane.$(OBJEXT) \
+	$(am__objects_3)
 am__objects_5 = $(am__objects_2)
-am__objects_6 = 3Depict-allFilter.$(OBJEXT) \
-	3Depict-filterCommon.$(OBJEXT) 3Depict-dataLoad.$(OBJEXT) \
-	3Depict-ionDownsample.$(OBJEXT) 3Depict-rangeFile.$(OBJEXT) \
-	3Depict-voxelise.$(OBJEXT) 3Depict-spectrumPlot.$(OBJEXT) \
-	3Depict-transform.$(OBJEXT) 3Depict-externalProgram.$(OBJEXT) \
-	3Depict-ionClip.$(OBJEXT) 3Depict-ionColour.$(OBJEXT) \
-	3Depict-boundingBox.$(OBJEXT) \
-	3Depict-compositionProfile.$(OBJEXT) \
-	3Depict-spatialAnalysis.$(OBJEXT) \
-	3Depict-clusterAnalysis.$(OBJEXT) 3Depict-ionInfo.$(OBJEXT) \
-	3Depict-annotation.$(OBJEXT) 3Depict-geometryHelpers.$(OBJEXT)
-am__objects_7 = 3Depict-animator.$(OBJEXT) \
-	3Depict-filtertreeAnalyse.$(OBJEXT) \
-	3Depict-filtertree.$(OBJEXT) 3Depict-ionhit.$(OBJEXT) \
-	3Depict-APTFileIO.$(OBJEXT) 3Depict-APTRanges.$(OBJEXT) \
-	3Depict-K3DTree.$(OBJEXT) 3Depict-K3DTree-mk2.$(OBJEXT) \
-	3Depict-filter.$(OBJEXT) 3Depict-rdf.$(OBJEXT) \
-	3Depict-viscontrol.$(OBJEXT) 3Depict-state.$(OBJEXT) \
-	3Depict-plot.$(OBJEXT) 3Depict-configFile.$(OBJEXT)
-am__objects_8 = 3Depict-scene.$(OBJEXT) 3Depict-drawables.$(OBJEXT) \
-	3Depict-effect.$(OBJEXT) 3Depict-textures.$(OBJEXT) \
-	3Depict-select.$(OBJEXT) 3Depict-cameras.$(OBJEXT) \
-	3Depict-isoSurface.$(OBJEXT)
-am__objects_9 = 3Depict-pngread.$(OBJEXT) \
-	3Depict-stringFuncs.$(OBJEXT) 3Depict-xmlHelper.$(OBJEXT) \
-	3Depict-colourmap.$(OBJEXT) 3Depict-voxels.$(OBJEXT) \
-	3Depict-mathfuncs.$(OBJEXT) 3Depict-basics.$(OBJEXT)
+am__objects_6 = backend/filters/3Depict-allFilter.$(OBJEXT) \
+	backend/filters/3Depict-filterCommon.$(OBJEXT) \
+	backend/filters/3Depict-dataLoad.$(OBJEXT) \
+	backend/filters/3Depict-ionDownsample.$(OBJEXT) \
+	backend/filters/3Depict-rangeFile.$(OBJEXT) \
+	backend/filters/3Depict-voxelise.$(OBJEXT) \
+	backend/filters/3Depict-spectrumPlot.$(OBJEXT) \
+	backend/filters/3Depict-transform.$(OBJEXT) \
+	backend/filters/3Depict-externalProgram.$(OBJEXT) \
+	backend/filters/3Depict-ionClip.$(OBJEXT) \
+	backend/filters/3Depict-ionColour.$(OBJEXT) \
+	backend/filters/3Depict-boundingBox.$(OBJEXT) \
+	backend/filters/3Depict-compositionProfile.$(OBJEXT) \
+	backend/filters/3Depict-spatialAnalysis.$(OBJEXT) \
+	backend/filters/3Depict-clusterAnalysis.$(OBJEXT) \
+	backend/filters/3Depict-ionInfo.$(OBJEXT) \
+	backend/filters/3Depict-annotation.$(OBJEXT) \
+	backend/filters/3Depict-geometryHelpers.$(OBJEXT) \
+	backend/filters/algorithms/3Depict-binomial.$(OBJEXT)
+am__objects_7 = backend/3Depict-animator.$(OBJEXT) \
+	backend/3Depict-filtertreeAnalyse.$(OBJEXT) \
+	backend/3Depict-filtertree.$(OBJEXT) \
+	backend/APT/3Depict-ionhit.$(OBJEXT) \
+	backend/APT/3Depict-APTFileIO.$(OBJEXT) \
+	backend/APT/3Depict-APTRanges.$(OBJEXT) \
+	backend/APT/3Depict-abundanceParser.$(OBJEXT) \
+	backend/filters/algorithms/3Depict-K3DTree.$(OBJEXT) \
+	backend/filters/algorithms/3Depict-K3DTree-mk2.$(OBJEXT) \
+	backend/3Depict-filter.$(OBJEXT) \
+	backend/filters/algorithms/3Depict-rdf.$(OBJEXT) \
+	backend/3Depict-viscontrol.$(OBJEXT) \
+	backend/3Depict-state.$(OBJEXT) backend/3Depict-plot.$(OBJEXT) \
+	backend/3Depict-configFile.$(OBJEXT)
+am__objects_8 = gl/3Depict-scene.$(OBJEXT) \
+	gl/3Depict-drawables.$(OBJEXT) gl/3Depict-effect.$(OBJEXT) \
+	gl/3Depict-textures.$(OBJEXT) gl/3Depict-select.$(OBJEXT) \
+	gl/3Depict-cameras.$(OBJEXT) gl/3Depict-isoSurface.$(OBJEXT) \
+	gl/3Depict-tr.$(OBJEXT)
+am__objects_9 = common/3Depict-pngread.$(OBJEXT) \
+	common/3Depict-stringFuncs.$(OBJEXT) \
+	common/3Depict-xmlHelper.$(OBJEXT) \
+	common/3Depict-colourmap.$(OBJEXT) \
+	common/3Depict-voxels.$(OBJEXT) \
+	common/3Depict-mathfuncs.$(OBJEXT) \
+	common/3Depict-basics.$(OBJEXT)
 am__objects_10 = $(am__objects_1) $(am__objects_2) $(am__objects_4) \
 	$(am__objects_5) $(am__objects_6) $(am__objects_2) \
 	$(am__objects_7) $(am__objects_2) $(am__objects_8) \
 	$(am__objects_2) $(am__objects_9) $(am__objects_2)
- at HAVE_WINDRES_FALSE@am_3Depict_OBJECTS = $(am__objects_10)
- at HAVE_WINDRES_TRUE@am_3Depict_OBJECTS = $(am__objects_10) \
- at HAVE_WINDRES_TRUE@	3Depict.$(OBJEXT)
+am_3Depict_OBJECTS = $(am__objects_10) $(am__objects_2)
 3Depict_OBJECTS = $(am_3Depict_OBJECTS)
 am__DEPENDENCIES_1 =
 3Depict_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
@@ -192,22 +253,54 @@ am__DEPENDENCIES_1 =
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__append_2)
 3Depict_LINK = $(CXXLD) $(3Depict_CXXFLAGS) $(CXXFLAGS) \
 	$(3Depict_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
 CXXLD = $(CXX)
 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
 	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
 SOURCES = $(3Depict_SOURCES)
 DIST_SOURCES = $(am__3Depict_SOURCES_DIST)
 am__can_run_installinfo = \
@@ -215,11 +308,29 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -361,9 +472,9 @@ MSYS_PATH = /c/msys/1.0/local/include/
 	       $(XML_CFLAGS) $(GSL_CFLAGS)  $(MGL_CFLAGS) $(PNG_CFLAGS) $(QHULL_CFLAGS) \
 	      $(OPENMP_FLAGS) $(DEBUG_FLAGS) -pipe
 
-3Depict_LDADD = $(LIBS) $(GETTEXT_LIBS) $(WX_LIBS) $(MGL_LIBS)  $(FTGL_LIBS) \
-		 $(FT_LIBS) $(XML_LIBS) $(GSL_LIBS) $(GL_LIBS) $(GLU_LIBS) $(QHULL_LIBS) $(PNG_LIBS) 
-
+3Depict_LDADD = $(LIBS) $(GETTEXT_LIBS) $(WX_LIBS) $(MGL_LIBS) \
+	$(FTGL_LIBS) $(FT_LIBS) $(XML_LIBS) $(GSL_LIBS) $(GL_LIBS) \
+	$(GLU_LIBS) $(QHULL_LIBS) $(PNG_LIBS) $(am__append_2)
 
 #------- Common header files for all sub-modules
 COMMON_SOURCE_FILES = common/pngread.c common/stringFuncs.cpp common/xmlHelper.cpp common/colourmap.cpp common/voxels.cpp common/mathfuncs.cpp common/basics.cpp
@@ -382,7 +493,8 @@ FILTER_FILES = backend/filters/allFilter.cpp backend/filters/filterCommon.cpp \
 		backend/filters/ionColour.cpp backend/filters/boundingBox.cpp  \
 		backend/filters/compositionProfile.cpp backend/filters/spatialAnalysis.cpp \
 		backend/filters/clusterAnalysis.cpp backend/filters/ionInfo.cpp \
-		backend/filters/annotation.cpp backend/filters/geometryHelpers.cpp
+		backend/filters/annotation.cpp backend/filters/geometryHelpers.cpp \
+		backend/filters/algorithms/binomial.cpp 
 
 FILTER_HEADER_FILES = backend/filters/allFilter.h backend/filters/filterCommon.h \
 		backend/filters/dataLoad.h backend/filters/ionDownsample.h \
@@ -391,18 +503,19 @@ FILTER_HEADER_FILES = backend/filters/allFilter.h backend/filters/filterCommon.h
 		backend/filters/ionColour.h backend/filters/boundingBox.h  \
 		backend/filters/compositionProfile.h backend/filters/spatialAnalysis.h \
 		backend/filters/clusterAnalysis.h backend/filters/ionInfo.h \
-		backend/filters/annotation.h backend/filters/geometryHelpers.h
+		backend/filters/annotation.h backend/filters/geometryHelpers.h \
+		backend/filters/algorithms/binomial.h
 
 BACKEND_SOURCE_FILES = backend/animator.cpp backend/filtertreeAnalyse.cpp backend/filtertree.cpp \
-		     	backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp \
-			backend/filters/K3DTree.cpp backend/filters/K3DTree-mk2.cpp\
-			backend/filter.cpp backend/filters/rdf.cpp \
+		     	backend/APT/ionhit.cpp backend/APT/APTFileIO.cpp backend/APT/APTRanges.cpp backend/APT/abundanceParser.cpp \
+			backend/filters/algorithms/K3DTree.cpp backend/filters/algorithms/K3DTree-mk2.cpp\
+			backend/filter.cpp backend/filters/algorithms/rdf.cpp \
 		       backend/viscontrol.cpp backend/state.cpp backend/plot.cpp  backend/configFile.cpp 
 
 BACKEND_HEADER_FILES = backend/animator.h backend/filtertreeAnalyse.h backend/filtertree.h\
-			backend/APT/ionhit.h backend/APT/APTFileIO.h backend/APT/APTRanges.h \
-			backend/filters/K3DTree.h backend/filters/K3DTree-mk2.h \
-			backend/filter.h backend/filters/rdf.h \
+			backend/APT/ionhit.h backend/APT/APTFileIO.h backend/APT/APTRanges.h backend/APT/abundanceParser.h \
+			backend/filters/algorithms/K3DTree.h backend/filters/algorithms/K3DTree-mk2.h \
+			backend/filter.h backend/filters/algorithms/rdf.h \
 			backend/viscontrol.h backend/state.h backend/plot.h backend/configFile.h \
 		        backend/tree.hh
 
@@ -410,9 +523,8 @@ BACKEND_HEADER_FILES = backend/animator.h backend/filtertreeAnalyse.h backend/fi
 #------------
 
 #------------ OpenGL interface files
-OPENGL_HEADER_FILES = gl/scene.h gl/drawables.h gl/effect.h gl/textures.h gl/select.h gl/cameras.h gl/isoSurface.h
-OPENGL_SOURCE_FILES = gl/scene.cpp gl/drawables.cpp gl/effect.cpp gl/textures.cpp gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp
-
+OPENGL_HEADER_FILES = gl/scene.h gl/drawables.h gl/effect.h gl/textures.h gl/select.h gl/cameras.h gl/isoSurface.h gl/tr.h gl/glDebug.h
+OPENGL_SOURCE_FILES = gl/scene.cpp gl/drawables.cpp gl/effect.cpp gl/textures.cpp gl/select.cpp gl/cameras.cpp gl/isoSurface.cpp gl/tr.cpp
 #------------
 
 #------------ Frontend (linked to UI in some way) files ---
@@ -422,7 +534,8 @@ DIALOG_SOURCE_FILES = gui/dialogs/ExportPos.cpp  gui/dialogs/ExportRngDialog.cpp
 		gui/dialogs/animateFilterDialog.cpp \
 		gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp \
 		gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp \
-		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp \
+		gui/dialogs/rangeEditDialog.cpp
 
 DIALOG_HEADER_FILES = gui/dialogs/ExportPos.h gui/dialogs/ExportRngDialog.h gui/dialogs/prefDialog.h \
 		gui/dialogs/StashDialog.h gui/dialogs/resolutionDialog.h \
@@ -431,29 +544,27 @@ DIALOG_HEADER_FILES = gui/dialogs/ExportPos.h gui/dialogs/ExportRngDialog.h gui/
 		gui/dialogs/animateSubDialogs/realKeyFrameDialog.h \
 		gui/dialogs/animateSubDialogs/colourKeyFrameDialog.h \
 		gui/dialogs/animateSubDialogs/stringKeyFrameDialog.h \
-		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.h
+		gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.h \
+		gui/dialogs/rangeEditDialog.h
 
 GUI_SOURCE_FILES = gui/mainFrame.cpp gui/mathglPane.cpp gui/cropPanel.cpp gui/glPane.cpp  $(DIALOG_SOURCE_FILES)
 GUI_HEADER_FILES = gui/mainFrame.h gui/mathglPane.h gui/cropPanel.h gui/art.h gui/glPane.h $(DIALOG_HEADER_FILES)
-BASE_SOURCE_FILES = 3Depict.cpp testing.cpp  wxcomponents.cpp wxcommon.cpp winconsole.cpp 
-BASE_HEADER_FILES = testing.h winconsole.h   wxcomponents.h  wxcommon.h
+BASE_SOURCE_FILES = 3Depict.cpp testing/testing.cpp  wx/wxcomponents.cpp wx/wxcommon.cpp winconsole.cpp 
+BASE_HEADER_FILES = testing/testing.h winconsole.h   wx/wxcomponents.h  wx/wxcommon.h 
 #-----------
 SOURCE_FILES = $(BASE_SOURCE_FILES) $(BASE_HEADER_FILES) $(GUI_SOURCE_FILES) $(GUI_HEADER_FILES) \
 	       $(FILTER_FILES) $(FILTER_HEADER_FILES) \
 	       ${BACKEND_SOURCE_FILES} ${BACKEND_HEADER_FILES} $(OPENGL_SOURCE_FILES) $(OPENGL_HEADER_FILES) \
 	       $(COMMON_SOURCE_FILES) $(COMMON_HEADER_FILES)
 
- at HAVE_WINDRES_FALSE@3Depict_SOURCES = $(SOURCE_FILES)
-
-#Do we have or need windows-XP "resource" files for look and feel?
- at HAVE_WINDRES_TRUE@3Depict_SOURCES = $(SOURCE_FILES)  3Depict.rc
+3Depict_SOURCES = $(SOURCE_FILES) $(am__append_1)
 
 #Tarball options
-EXTRA_DIST = gui/glade-skeleton myAppIcon.ico
+EXTRA_DIST = gui/glade-skeleton myAppIcon.ico testing/filtertesting.cpp
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .c .cpp .o .obj .rc
+.SUFFIXES: .c .cpp .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
@@ -493,10 +604,11 @@ install-binPROGRAMS: $(bin_PROGRAMS)
 	fi; \
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p; \
-	  then echo "$$p"; echo "$$p"; else :; fi; \
+	while read p p1; do if test -f $$p \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
 	done | \
-	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
 	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
 	sed 'N;N;N;s,\n, ,g' | \
 	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@@ -517,1062 +629,1363 @@ uninstall-binPROGRAMS:
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
 	files=`for p in $$list; do echo "$$p"; done | \
 	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-	      -e 's/$$/$(EXEEXT)/' `; \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
 	test -n "$$list" || exit 0; \
 	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
 	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
 clean-binPROGRAMS:
 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+testing/$(am__dirstamp):
+	@$(MKDIR_P) testing
+	@: > testing/$(am__dirstamp)
+testing/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) testing/$(DEPDIR)
+	@: > testing/$(DEPDIR)/$(am__dirstamp)
+testing/3Depict-testing.$(OBJEXT): testing/$(am__dirstamp) \
+	testing/$(DEPDIR)/$(am__dirstamp)
+wx/$(am__dirstamp):
+	@$(MKDIR_P) wx
+	@: > wx/$(am__dirstamp)
+wx/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) wx/$(DEPDIR)
+	@: > wx/$(DEPDIR)/$(am__dirstamp)
+wx/3Depict-wxcomponents.$(OBJEXT): wx/$(am__dirstamp) \
+	wx/$(DEPDIR)/$(am__dirstamp)
+wx/3Depict-wxcommon.$(OBJEXT): wx/$(am__dirstamp) \
+	wx/$(DEPDIR)/$(am__dirstamp)
+gui/$(am__dirstamp):
+	@$(MKDIR_P) gui
+	@: > gui/$(am__dirstamp)
+gui/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) gui/$(DEPDIR)
+	@: > gui/$(DEPDIR)/$(am__dirstamp)
+gui/3Depict-mainFrame.$(OBJEXT): gui/$(am__dirstamp) \
+	gui/$(DEPDIR)/$(am__dirstamp)
+gui/3Depict-mathglPane.$(OBJEXT): gui/$(am__dirstamp) \
+	gui/$(DEPDIR)/$(am__dirstamp)
+gui/3Depict-cropPanel.$(OBJEXT): gui/$(am__dirstamp) \
+	gui/$(DEPDIR)/$(am__dirstamp)
+gui/3Depict-glPane.$(OBJEXT): gui/$(am__dirstamp) \
+	gui/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/$(am__dirstamp):
+	@$(MKDIR_P) gui/dialogs
+	@: > gui/dialogs/$(am__dirstamp)
+gui/dialogs/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) gui/dialogs/$(DEPDIR)
+	@: > gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-ExportPos.$(OBJEXT): gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-ExportRngDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-prefDialog.$(OBJEXT): gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-resolutionDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-StashDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-autosaveDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-filterErrorDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-animateFilterDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/animateSubDialogs/$(am__dirstamp):
+	@$(MKDIR_P) gui/dialogs/animateSubDialogs
+	@: > gui/dialogs/animateSubDialogs/$(am__dirstamp)
+gui/dialogs/animateSubDialogs/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) gui/dialogs/animateSubDialogs/$(DEPDIR)
+	@: > gui/dialogs/animateSubDialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.$(OBJEXT):  \
+	gui/dialogs/animateSubDialogs/$(am__dirstamp) \
+	gui/dialogs/animateSubDialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.$(OBJEXT):  \
+	gui/dialogs/animateSubDialogs/$(am__dirstamp) \
+	gui/dialogs/animateSubDialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.$(OBJEXT):  \
+	gui/dialogs/animateSubDialogs/$(am__dirstamp) \
+	gui/dialogs/animateSubDialogs/$(DEPDIR)/$(am__dirstamp)
+gui/dialogs/3Depict-rangeEditDialog.$(OBJEXT):  \
+	gui/dialogs/$(am__dirstamp) \
+	gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+backend/filters/$(am__dirstamp):
+	@$(MKDIR_P) backend/filters
+	@: > backend/filters/$(am__dirstamp)
+backend/filters/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) backend/filters/$(DEPDIR)
+	@: > backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-allFilter.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-filterCommon.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-dataLoad.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-ionDownsample.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-rangeFile.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-voxelise.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-spectrumPlot.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-transform.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-externalProgram.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-ionClip.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-ionColour.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-boundingBox.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-compositionProfile.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-spatialAnalysis.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-clusterAnalysis.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-ionInfo.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-annotation.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/3Depict-geometryHelpers.$(OBJEXT):  \
+	backend/filters/$(am__dirstamp) \
+	backend/filters/$(DEPDIR)/$(am__dirstamp)
+backend/filters/algorithms/$(am__dirstamp):
+	@$(MKDIR_P) backend/filters/algorithms
+	@: > backend/filters/algorithms/$(am__dirstamp)
+backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) backend/filters/algorithms/$(DEPDIR)
+	@: > backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp)
+backend/filters/algorithms/3Depict-binomial.$(OBJEXT):  \
+	backend/filters/algorithms/$(am__dirstamp) \
+	backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp)
+backend/$(am__dirstamp):
+	@$(MKDIR_P) backend
+	@: > backend/$(am__dirstamp)
+backend/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) backend/$(DEPDIR)
+	@: > backend/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-animator.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-filtertreeAnalyse.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-filtertree.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/APT/$(am__dirstamp):
+	@$(MKDIR_P) backend/APT
+	@: > backend/APT/$(am__dirstamp)
+backend/APT/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) backend/APT/$(DEPDIR)
+	@: > backend/APT/$(DEPDIR)/$(am__dirstamp)
+backend/APT/3Depict-ionhit.$(OBJEXT): backend/APT/$(am__dirstamp) \
+	backend/APT/$(DEPDIR)/$(am__dirstamp)
+backend/APT/3Depict-APTFileIO.$(OBJEXT): backend/APT/$(am__dirstamp) \
+	backend/APT/$(DEPDIR)/$(am__dirstamp)
+backend/APT/3Depict-APTRanges.$(OBJEXT): backend/APT/$(am__dirstamp) \
+	backend/APT/$(DEPDIR)/$(am__dirstamp)
+backend/APT/3Depict-abundanceParser.$(OBJEXT):  \
+	backend/APT/$(am__dirstamp) \
+	backend/APT/$(DEPDIR)/$(am__dirstamp)
+backend/filters/algorithms/3Depict-K3DTree.$(OBJEXT):  \
+	backend/filters/algorithms/$(am__dirstamp) \
+	backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp)
+backend/filters/algorithms/3Depict-K3DTree-mk2.$(OBJEXT):  \
+	backend/filters/algorithms/$(am__dirstamp) \
+	backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-filter.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/filters/algorithms/3Depict-rdf.$(OBJEXT):  \
+	backend/filters/algorithms/$(am__dirstamp) \
+	backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-viscontrol.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-state.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-plot.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+backend/3Depict-configFile.$(OBJEXT): backend/$(am__dirstamp) \
+	backend/$(DEPDIR)/$(am__dirstamp)
+gl/$(am__dirstamp):
+	@$(MKDIR_P) gl
+	@: > gl/$(am__dirstamp)
+gl/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) gl/$(DEPDIR)
+	@: > gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-scene.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-drawables.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-effect.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-textures.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-select.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-cameras.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-isoSurface.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+gl/3Depict-tr.$(OBJEXT): gl/$(am__dirstamp) \
+	gl/$(DEPDIR)/$(am__dirstamp)
+common/$(am__dirstamp):
+	@$(MKDIR_P) common
+	@: > common/$(am__dirstamp)
+common/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) common/$(DEPDIR)
+	@: > common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-pngread.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-stringFuncs.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-xmlHelper.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-colourmap.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-voxels.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-mathfuncs.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+common/3Depict-basics.$(OBJEXT): common/$(am__dirstamp) \
+	common/$(DEPDIR)/$(am__dirstamp)
+
 3Depict$(EXEEXT): $(3Depict_OBJECTS) $(3Depict_DEPENDENCIES) $(EXTRA_3Depict_DEPENDENCIES) 
 	@rm -f 3Depict$(EXEEXT)
-	$(3Depict_LINK) $(3Depict_OBJECTS) $(3Depict_LDADD) $(LIBS)
+	$(AM_V_CXXLD)$(3Depict_LINK) $(3Depict_OBJECTS) $(3Depict_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
+	-rm -f backend/*.$(OBJEXT)
+	-rm -f backend/APT/*.$(OBJEXT)
+	-rm -f backend/filters/*.$(OBJEXT)
+	-rm -f backend/filters/algorithms/*.$(OBJEXT)
+	-rm -f common/*.$(OBJEXT)
+	-rm -f gl/*.$(OBJEXT)
+	-rm -f gui/*.$(OBJEXT)
+	-rm -f gui/dialogs/*.$(OBJEXT)
+	-rm -f gui/dialogs/animateSubDialogs/*.$(OBJEXT)
+	-rm -f testing/*.$(OBJEXT)
+	-rm -f wx/*.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-3Depict.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-APTFileIO.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-APTRanges.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ExportPos.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ExportRngDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-K3DTree-mk2.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-K3DTree.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-StashDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-allFilter.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-animateFilterDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-animator.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-annotation.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-autosaveDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-basics.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-boundingBox.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-cameras.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-choiceKeyFrameDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-clusterAnalysis.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-colourKeyFrameDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-colourmap.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-compositionProfile.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-configFile.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-cropPanel.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-dataLoad.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-drawables.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-effect.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-externalProgram.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-filter.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-filterCommon.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-filterErrorDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-filtertree.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-filtertreeAnalyse.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-geometryHelpers.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-glPane.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ionClip.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ionColour.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ionDownsample.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ionInfo.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-ionhit.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-isoSurface.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-mainFrame.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-mathfuncs.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-mathglPane.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-plot.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-pngread.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-prefDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-rangeFile.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-rdf.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-resolutionDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-scene.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-select.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-spatialAnalysis.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-spectrumPlot.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-state.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-stringFuncs.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-stringKeyFrameDialog.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-testing.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-textures.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-transform.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-viscontrol.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-voxelise.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-voxels.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-winconsole.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-wxcommon.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-wxcomponents.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/3Depict-xmlHelper.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-animator.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-configFile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-filter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-filtertree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-plot.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-state.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/$(DEPDIR)/3Depict-viscontrol.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/APT/$(DEPDIR)/3Depict-APTFileIO.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/APT/$(DEPDIR)/3Depict-APTRanges.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/APT/$(DEPDIR)/3Depict-abundanceParser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/APT/$(DEPDIR)/3Depict-ionhit.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-allFilter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-annotation.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-boundingBox.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-compositionProfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-dataLoad.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-externalProgram.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-filterCommon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-ionClip.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-ionColour.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-ionDownsample.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-ionInfo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-rangeFile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-transform.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/$(DEPDIR)/3Depict-voxelise.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-basics.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-colourmap.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-mathfuncs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-pngread.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-stringFuncs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-voxels.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at common/$(DEPDIR)/3Depict-xmlHelper.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-cameras.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-drawables.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-effect.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-isoSurface.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-scene.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-select.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-textures.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gl/$(DEPDIR)/3Depict-tr.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/$(DEPDIR)/3Depict-cropPanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/$(DEPDIR)/3Depict-glPane.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/$(DEPDIR)/3Depict-mainFrame.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/$(DEPDIR)/3Depict-mathglPane.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at testing/$(DEPDIR)/3Depict-testing.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at wx/$(DEPDIR)/3Depict-wxcommon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at wx/$(DEPDIR)/3Depict-wxcomponents.Po at am__quote@
 
 .c.o:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
 .c.obj:
- at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-3Depict-pngread.o: common/pngread.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -MT 3Depict-pngread.o -MD -MP -MF $(DEPDIR)/3Depict-pngread.Tpo -c -o 3Depict-pngread.o `test -f 'common/pngread.c' || echo '$(srcdir)/'`common/pngread.c
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/3Depict-pngread.Tpo $(DEPDIR)/3Depict-pngread.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='common/pngread.c' object='3Depict-pngread.o' libtool=no @AMDEPBACKSLASH@
+common/3Depict-pngread.o: common/pngread.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -MT common/3Depict-pngread.o -MD -MP -MF common/$(DEPDIR)/3Depict-pngread.Tpo -c -o common/3Depict-pngread.o `test -f 'common/pngread.c' || echo '$(srcdir)/'`common/pngread.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-pngread.Tpo common/$(DEPDIR)/3Depict-pngread.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='common/pngread.c' object='common/3Depict-pngread.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -c -o 3Depict-pngread.o `test -f 'common/pngread.c' || echo '$(srcdir)/'`common/pngread.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -c -o common/3Depict-pngread.o `test -f 'common/pngread.c' || echo '$(srcdir)/'`common/pngread.c
 
-3Depict-pngread.obj: common/pngread.c
- at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -MT 3Depict-pngread.obj -MD -MP -MF $(DEPDIR)/3Depict-pngread.Tpo -c -o 3Depict-pngread.obj `if test -f 'common/pngread.c'; then $(CYGPATH_W) 'common/pngread.c'; else $(CYGPATH_W) '$(srcdir)/common/pngread.c'; fi`
- at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/3Depict-pngread.Tpo $(DEPDIR)/3Depict-pngread.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='common/pngread.c' object='3Depict-pngread.obj' libtool=no @AMDEPBACKSLASH@
+common/3Depict-pngread.obj: common/pngread.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -MT common/3Depict-pngread.obj -MD -MP -MF common/$(DEPDIR)/3Depict-pngread.Tpo -c -o common/3Depict-pngread.obj `if test -f 'common/pngread.c'; then $(CYGPATH_W) 'common/pngread.c'; else $(CYGPATH_W) '$(srcdir)/common/pngread.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-pngread.Tpo common/$(DEPDIR)/3Depict-pngread.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='common/pngread.c' object='common/3Depict-pngread.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -c -o 3Depict-pngread.obj `if test -f 'common/pngread.c'; then $(CYGPATH_W) 'common/pngread.c'; else $(CYGPATH_W) '$(srcdir)/common/pngread.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CFLAGS) $(CFLAGS) -c -o common/3Depict-pngread.obj `if test -f 'common/pngread.c'; then $(CYGPATH_W) 'common/pngread.c'; else $(CYGPATH_W) '$(srcdir)/common/pngread.c'; fi`
 
 .cpp.o:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
 
 .cpp.obj:
- at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
 3Depict-3Depict.o: 3Depict.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-3Depict.o -MD -MP -MF $(DEPDIR)/3Depict-3Depict.Tpo -c -o 3Depict-3Depict.o `test -f '3Depict.cpp' || echo '$(srcdir)/'`3Depict.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-3Depict.Tpo $(DEPDIR)/3Depict-3Depict.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='3Depict.cpp' object='3Depict-3Depict.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-3Depict.o -MD -MP -MF $(DEPDIR)/3Depict-3Depict.Tpo -c -o 3Depict-3Depict.o `test -f '3Depict.cpp' || echo '$(srcdir)/'`3Depict.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/3Depict-3Depict.Tpo $(DEPDIR)/3Depict-3Depict.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='3Depict.cpp' object='3Depict-3Depict.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-3Depict.o `test -f '3Depict.cpp' || echo '$(srcdir)/'`3Depict.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-3Depict.o `test -f '3Depict.cpp' || echo '$(srcdir)/'`3Depict.cpp
 
 3Depict-3Depict.obj: 3Depict.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-3Depict.obj -MD -MP -MF $(DEPDIR)/3Depict-3Depict.Tpo -c -o 3Depict-3Depict.obj `if test -f '3Depict.cpp'; then $(CYGPATH_W) '3Depict.cpp'; else $(CYGPATH_W) '$(srcdir)/3Depict.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-3Depict.Tpo $(DEPDIR)/3Depict-3Depict.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='3Depict.cpp' object='3Depict-3Depict.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-3Depict.obj -MD -MP -MF $(DEPDIR)/3Depict-3Depict.Tpo -c -o 3Depict-3Depict.obj `if test -f '3Depict.cpp'; then $(CYGPATH_W) '3Depict.cpp'; else $(CYGPATH_W) '$(srcdir)/3Depict.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/3Depict-3Depict.Tpo $(DEPDIR)/3Depict-3Depict.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='3Depict.cpp' object='3Depict-3Depict.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-3Depict.obj `if test -f '3Depict.cpp'; then $(CYGPATH_W) '3Depict.cpp'; else $(CYGPATH_W) '$(srcdir)/3Depict.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-3Depict.obj `if test -f '3Depict.cpp'; then $(CYGPATH_W) '3Depict.cpp'; else $(CYGPATH_W) '$(srcdir)/3Depict.cpp'; fi`
 
-3Depict-testing.o: testing.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-testing.o -MD -MP -MF $(DEPDIR)/3Depict-testing.Tpo -c -o 3Depict-testing.o `test -f 'testing.cpp' || echo '$(srcdir)/'`testing.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-testing.Tpo $(DEPDIR)/3Depict-testing.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='testing.cpp' object='3Depict-testing.o' libtool=no @AMDEPBACKSLASH@
+testing/3Depict-testing.o: testing/testing.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT testing/3Depict-testing.o -MD -MP -MF testing/$(DEPDIR)/3Depict-testing.Tpo -c -o testing/3Depict-testing.o `test -f 'testing/testing.cpp' || echo '$(srcdir)/'`testing/testing.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) testing/$(DEPDIR)/3Depict-testing.Tpo testing/$(DEPDIR)/3Depict-testing.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='testing/testing.cpp' object='testing/3Depict-testing.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-testing.o `test -f 'testing.cpp' || echo '$(srcdir)/'`testing.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o testing/3Depict-testing.o `test -f 'testing/testing.cpp' || echo '$(srcdir)/'`testing/testing.cpp
 
-3Depict-testing.obj: testing.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-testing.obj -MD -MP -MF $(DEPDIR)/3Depict-testing.Tpo -c -o 3Depict-testing.obj `if test -f 'testing.cpp'; then $(CYGPATH_W) 'testing.cpp'; else $(CYGPATH_W) '$(srcdir)/testing.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-testing.Tpo $(DEPDIR)/3Depict-testing.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='testing.cpp' object='3Depict-testing.obj' libtool=no @AMDEPBACKSLASH@
+testing/3Depict-testing.obj: testing/testing.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT testing/3Depict-testing.obj -MD -MP -MF testing/$(DEPDIR)/3Depict-testing.Tpo -c -o testing/3Depict-testing.obj `if test -f 'testing/testing.cpp'; then $(CYGPATH_W) 'testing/testing.cpp'; else $(CYGPATH_W) '$(srcdir)/testing/testing.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) testing/$(DEPDIR)/3Depict-testing.Tpo testing/$(DEPDIR)/3Depict-testing.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='testing/testing.cpp' object='testing/3Depict-testing.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-testing.obj `if test -f 'testing.cpp'; then $(CYGPATH_W) 'testing.cpp'; else $(CYGPATH_W) '$(srcdir)/testing.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o testing/3Depict-testing.obj `if test -f 'testing/testing.cpp'; then $(CYGPATH_W) 'testing/testing.cpp'; else $(CYGPATH_W) '$(srcdir)/testing/testing.cpp'; fi`
 
-3Depict-wxcomponents.o: wxcomponents.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-wxcomponents.o -MD -MP -MF $(DEPDIR)/3Depict-wxcomponents.Tpo -c -o 3Depict-wxcomponents.o `test -f 'wxcomponents.cpp' || echo '$(srcdir)/'`wxcomponents.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-wxcomponents.Tpo $(DEPDIR)/3Depict-wxcomponents.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='wxcomponents.cpp' object='3Depict-wxcomponents.o' libtool=no @AMDEPBACKSLASH@
+wx/3Depict-wxcomponents.o: wx/wxcomponents.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT wx/3Depict-wxcomponents.o -MD -MP -MF wx/$(DEPDIR)/3Depict-wxcomponents.Tpo -c -o wx/3Depict-wxcomponents.o `test -f 'wx/wxcomponents.cpp' || echo '$(srcdir)/'`wx/wxcomponents.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) wx/$(DEPDIR)/3Depict-wxcomponents.Tpo wx/$(DEPDIR)/3Depict-wxcomponents.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='wx/wxcomponents.cpp' object='wx/3Depict-wxcomponents.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-wxcomponents.o `test -f 'wxcomponents.cpp' || echo '$(srcdir)/'`wxcomponents.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o wx/3Depict-wxcomponents.o `test -f 'wx/wxcomponents.cpp' || echo '$(srcdir)/'`wx/wxcomponents.cpp
 
-3Depict-wxcomponents.obj: wxcomponents.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-wxcomponents.obj -MD -MP -MF $(DEPDIR)/3Depict-wxcomponents.Tpo -c -o 3Depict-wxcomponents.obj `if test -f 'wxcomponents.cpp'; then $(CYGPATH_W) 'wxcomponents.cpp'; else $(CYGPATH_W) '$(srcdir)/wxcomponents.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-wxcomponents.Tpo $(DEPDIR)/3Depict-wxcomponents.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='wxcomponents.cpp' object='3Depict-wxcomponents.obj' libtool=no @AMDEPBACKSLASH@
+wx/3Depict-wxcomponents.obj: wx/wxcomponents.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT wx/3Depict-wxcomponents.obj -MD -MP -MF wx/$(DEPDIR)/3Depict-wxcomponents.Tpo -c -o wx/3Depict-wxcomponents.obj `if test -f 'wx/wxcomponents.cpp'; then $(CYGPATH_W) 'wx/wxcomponents.cpp'; else $(CYGPATH_W) '$(srcdir)/wx/wxcomponents.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) wx/$(DEPDIR)/3Depict-wxcomponents.Tpo wx/$(DEPDIR)/3Depict-wxcomponents.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='wx/wxcomponents.cpp' object='wx/3Depict-wxcomponents.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-wxcomponents.obj `if test -f 'wxcomponents.cpp'; then $(CYGPATH_W) 'wxcomponents.cpp'; else $(CYGPATH_W) '$(srcdir)/wxcomponents.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o wx/3Depict-wxcomponents.obj `if test -f 'wx/wxcomponents.cpp'; then $(CYGPATH_W) 'wx/wxcomponents.cpp'; else $(CYGPATH_W) '$(srcdir)/wx/wxcomponents.cpp'; fi`
 
-3Depict-wxcommon.o: wxcommon.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-wxcommon.o -MD -MP -MF $(DEPDIR)/3Depict-wxcommon.Tpo -c -o 3Depict-wxcommon.o `test -f 'wxcommon.cpp' || echo '$(srcdir)/'`wxcommon.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-wxcommon.Tpo $(DEPDIR)/3Depict-wxcommon.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='wxcommon.cpp' object='3Depict-wxcommon.o' libtool=no @AMDEPBACKSLASH@
+wx/3Depict-wxcommon.o: wx/wxcommon.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT wx/3Depict-wxcommon.o -MD -MP -MF wx/$(DEPDIR)/3Depict-wxcommon.Tpo -c -o wx/3Depict-wxcommon.o `test -f 'wx/wxcommon.cpp' || echo '$(srcdir)/'`wx/wxcommon.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) wx/$(DEPDIR)/3Depict-wxcommon.Tpo wx/$(DEPDIR)/3Depict-wxcommon.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='wx/wxcommon.cpp' object='wx/3Depict-wxcommon.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-wxcommon.o `test -f 'wxcommon.cpp' || echo '$(srcdir)/'`wxcommon.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o wx/3Depict-wxcommon.o `test -f 'wx/wxcommon.cpp' || echo '$(srcdir)/'`wx/wxcommon.cpp
 
-3Depict-wxcommon.obj: wxcommon.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-wxcommon.obj -MD -MP -MF $(DEPDIR)/3Depict-wxcommon.Tpo -c -o 3Depict-wxcommon.obj `if test -f 'wxcommon.cpp'; then $(CYGPATH_W) 'wxcommon.cpp'; else $(CYGPATH_W) '$(srcdir)/wxcommon.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-wxcommon.Tpo $(DEPDIR)/3Depict-wxcommon.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='wxcommon.cpp' object='3Depict-wxcommon.obj' libtool=no @AMDEPBACKSLASH@
+wx/3Depict-wxcommon.obj: wx/wxcommon.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT wx/3Depict-wxcommon.obj -MD -MP -MF wx/$(DEPDIR)/3Depict-wxcommon.Tpo -c -o wx/3Depict-wxcommon.obj `if test -f 'wx/wxcommon.cpp'; then $(CYGPATH_W) 'wx/wxcommon.cpp'; else $(CYGPATH_W) '$(srcdir)/wx/wxcommon.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) wx/$(DEPDIR)/3Depict-wxcommon.Tpo wx/$(DEPDIR)/3Depict-wxcommon.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='wx/wxcommon.cpp' object='wx/3Depict-wxcommon.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-wxcommon.obj `if test -f 'wxcommon.cpp'; then $(CYGPATH_W) 'wxcommon.cpp'; else $(CYGPATH_W) '$(srcdir)/wxcommon.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o wx/3Depict-wxcommon.obj `if test -f 'wx/wxcommon.cpp'; then $(CYGPATH_W) 'wx/wxcommon.cpp'; else $(CYGPATH_W) '$(srcdir)/wx/wxcommon.cpp'; fi`
 
 3Depict-winconsole.o: winconsole.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-winconsole.o -MD -MP -MF $(DEPDIR)/3Depict-winconsole.Tpo -c -o 3Depict-winconsole.o `test -f 'winconsole.cpp' || echo '$(srcdir)/'`winconsole.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-winconsole.Tpo $(DEPDIR)/3Depict-winconsole.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='winconsole.cpp' object='3Depict-winconsole.o' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-winconsole.o -MD -MP -MF $(DEPDIR)/3Depict-winconsole.Tpo -c -o 3Depict-winconsole.o `test -f 'winconsole.cpp' || echo '$(srcdir)/'`winconsole.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/3Depict-winconsole.Tpo $(DEPDIR)/3Depict-winconsole.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='winconsole.cpp' object='3Depict-winconsole.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-winconsole.o `test -f 'winconsole.cpp' || echo '$(srcdir)/'`winconsole.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-winconsole.o `test -f 'winconsole.cpp' || echo '$(srcdir)/'`winconsole.cpp
 
 3Depict-winconsole.obj: winconsole.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-winconsole.obj -MD -MP -MF $(DEPDIR)/3Depict-winconsole.Tpo -c -o 3Depict-winconsole.obj `if test -f 'winconsole.cpp'; then $(CYGPATH_W) 'winconsole.cpp'; else $(CYGPATH_W) '$(srcdir)/winconsole.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-winconsole.Tpo $(DEPDIR)/3Depict-winconsole.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='winconsole.cpp' object='3Depict-winconsole.obj' libtool=no @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-winconsole.obj -MD -MP -MF $(DEPDIR)/3Depict-winconsole.Tpo -c -o 3Depict-winconsole.obj `if test -f 'winconsole.cpp'; then $(CYGPATH_W) 'winconsole.cpp'; else $(CYGPATH_W) '$(srcdir)/winconsole.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/3Depict-winconsole.Tpo $(DEPDIR)/3Depict-winconsole.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='winconsole.cpp' object='3Depict-winconsole.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-winconsole.obj `if test -f 'winconsole.cpp'; then $(CYGPATH_W) 'winconsole.cpp'; else $(CYGPATH_W) '$(srcdir)/winconsole.cpp'; fi`
+
+gui/3Depict-mainFrame.o: gui/mainFrame.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-mainFrame.o -MD -MP -MF gui/$(DEPDIR)/3Depict-mainFrame.Tpo -c -o gui/3Depict-mainFrame.o `test -f 'gui/mainFrame.cpp' || echo '$(srcdir)/'`gui/mainFrame.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-mainFrame.Tpo gui/$(DEPDIR)/3Depict-mainFrame.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/mainFrame.cpp' object='gui/3Depict-mainFrame.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-mainFrame.o `test -f 'gui/mainFrame.cpp' || echo '$(srcdir)/'`gui/mainFrame.cpp
+
+gui/3Depict-mainFrame.obj: gui/mainFrame.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-mainFrame.obj -MD -MP -MF gui/$(DEPDIR)/3Depict-mainFrame.Tpo -c -o gui/3Depict-mainFrame.obj `if test -f 'gui/mainFrame.cpp'; then $(CYGPATH_W) 'gui/mainFrame.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mainFrame.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-mainFrame.Tpo gui/$(DEPDIR)/3Depict-mainFrame.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/mainFrame.cpp' object='gui/3Depict-mainFrame.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-winconsole.obj `if test -f 'winconsole.cpp'; then $(CYGPATH_W) 'winconsole.cpp'; else $(CYGPATH_W) '$(srcdir)/winconsole.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-mainFrame.obj `if test -f 'gui/mainFrame.cpp'; then $(CYGPATH_W) 'gui/mainFrame.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mainFrame.cpp'; fi`
 
-3Depict-mainFrame.o: gui/mainFrame.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-mainFrame.o -MD -MP -MF $(DEPDIR)/3Depict-mainFrame.Tpo -c -o 3Depict-mainFrame.o `test -f 'gui/mainFrame.cpp' || echo '$(srcdir)/'`gui/mainFrame.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-mainFrame.Tpo $(DEPDIR)/3Depict-mainFrame.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/mainFrame.cpp' object='3Depict-mainFrame.o' libtool=no @AMDEPBACKSLASH@
+gui/3Depict-mathglPane.o: gui/mathglPane.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-mathglPane.o -MD -MP -MF gui/$(DEPDIR)/3Depict-mathglPane.Tpo -c -o gui/3Depict-mathglPane.o `test -f 'gui/mathglPane.cpp' || echo '$(srcdir)/'`gui/mathglPane.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-mathglPane.Tpo gui/$(DEPDIR)/3Depict-mathglPane.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/mathglPane.cpp' object='gui/3Depict-mathglPane.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-mainFrame.o `test -f 'gui/mainFrame.cpp' || echo '$(srcdir)/'`gui/mainFrame.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-mathglPane.o `test -f 'gui/mathglPane.cpp' || echo '$(srcdir)/'`gui/mathglPane.cpp
 
-3Depict-mainFrame.obj: gui/mainFrame.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-mainFrame.obj -MD -MP -MF $(DEPDIR)/3Depict-mainFrame.Tpo -c -o 3Depict-mainFrame.obj `if test -f 'gui/mainFrame.cpp'; then $(CYGPATH_W) 'gui/mainFrame.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mainFrame.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-mainFrame.Tpo $(DEPDIR)/3Depict-mainFrame.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/mainFrame.cpp' object='3Depict-mainFrame.obj' libtool=no @AMDEPBACKSLASH@
+gui/3Depict-mathglPane.obj: gui/mathglPane.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-mathglPane.obj -MD -MP -MF gui/$(DEPDIR)/3Depict-mathglPane.Tpo -c -o gui/3Depict-mathglPane.obj `if test -f 'gui/mathglPane.cpp'; then $(CYGPATH_W) 'gui/mathglPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mathglPane.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-mathglPane.Tpo gui/$(DEPDIR)/3Depict-mathglPane.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/mathglPane.cpp' object='gui/3Depict-mathglPane.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-mainFrame.obj `if test -f 'gui/mainFrame.cpp'; then $(CYGPATH_W) 'gui/mainFrame.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mainFrame.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-mathglPane.obj `if test -f 'gui/mathglPane.cpp'; then $(CYGPATH_W) 'gui/mathglPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mathglPane.cpp'; fi`
 
-3Depict-mathglPane.o: gui/mathglPane.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-mathglPane.o -MD -MP -MF $(DEPDIR)/3Depict-mathglPane.Tpo -c -o 3Depict-mathglPane.o `test -f 'gui/mathglPane.cpp' || echo '$(srcdir)/'`gui/mathglPane.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-mathglPane.Tpo $(DEPDIR)/3Depict-mathglPane.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/mathglPane.cpp' object='3Depict-mathglPane.o' libtool=no @AMDEPBACKSLASH@
+gui/3Depict-cropPanel.o: gui/cropPanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-cropPanel.o -MD -MP -MF gui/$(DEPDIR)/3Depict-cropPanel.Tpo -c -o gui/3Depict-cropPanel.o `test -f 'gui/cropPanel.cpp' || echo '$(srcdir)/'`gui/cropPanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-cropPanel.Tpo gui/$(DEPDIR)/3Depict-cropPanel.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/cropPanel.cpp' object='gui/3Depict-cropPanel.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-mathglPane.o `test -f 'gui/mathglPane.cpp' || echo '$(srcdir)/'`gui/mathglPane.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-cropPanel.o `test -f 'gui/cropPanel.cpp' || echo '$(srcdir)/'`gui/cropPanel.cpp
 
-3Depict-mathglPane.obj: gui/mathglPane.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-mathglPane.obj -MD -MP -MF $(DEPDIR)/3Depict-mathglPane.Tpo -c -o 3Depict-mathglPane.obj `if test -f 'gui/mathglPane.cpp'; then $(CYGPATH_W) 'gui/mathglPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mathglPane.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-mathglPane.Tpo $(DEPDIR)/3Depict-mathglPane.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/mathglPane.cpp' object='3Depict-mathglPane.obj' libtool=no @AMDEPBACKSLASH@
+gui/3Depict-cropPanel.obj: gui/cropPanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-cropPanel.obj -MD -MP -MF gui/$(DEPDIR)/3Depict-cropPanel.Tpo -c -o gui/3Depict-cropPanel.obj `if test -f 'gui/cropPanel.cpp'; then $(CYGPATH_W) 'gui/cropPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/cropPanel.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-cropPanel.Tpo gui/$(DEPDIR)/3Depict-cropPanel.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/cropPanel.cpp' object='gui/3Depict-cropPanel.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-mathglPane.obj `if test -f 'gui/mathglPane.cpp'; then $(CYGPATH_W) 'gui/mathglPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/mathglPane.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-cropPanel.obj `if test -f 'gui/cropPanel.cpp'; then $(CYGPATH_W) 'gui/cropPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/cropPanel.cpp'; fi`
 
-3Depict-cropPanel.o: gui/cropPanel.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-cropPanel.o -MD -MP -MF $(DEPDIR)/3Depict-cropPanel.Tpo -c -o 3Depict-cropPanel.o `test -f 'gui/cropPanel.cpp' || echo '$(srcdir)/'`gui/cropPanel.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-cropPanel.Tpo $(DEPDIR)/3Depict-cropPanel.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/cropPanel.cpp' object='3Depict-cropPanel.o' libtool=no @AMDEPBACKSLASH@
+gui/3Depict-glPane.o: gui/glPane.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-glPane.o -MD -MP -MF gui/$(DEPDIR)/3Depict-glPane.Tpo -c -o gui/3Depict-glPane.o `test -f 'gui/glPane.cpp' || echo '$(srcdir)/'`gui/glPane.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-glPane.Tpo gui/$(DEPDIR)/3Depict-glPane.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/glPane.cpp' object='gui/3Depict-glPane.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-cropPanel.o `test -f 'gui/cropPanel.cpp' || echo '$(srcdir)/'`gui/cropPanel.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-glPane.o `test -f 'gui/glPane.cpp' || echo '$(srcdir)/'`gui/glPane.cpp
 
-3Depict-cropPanel.obj: gui/cropPanel.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-cropPanel.obj -MD -MP -MF $(DEPDIR)/3Depict-cropPanel.Tpo -c -o 3Depict-cropPanel.obj `if test -f 'gui/cropPanel.cpp'; then $(CYGPATH_W) 'gui/cropPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/cropPanel.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-cropPanel.Tpo $(DEPDIR)/3Depict-cropPanel.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/cropPanel.cpp' object='3Depict-cropPanel.obj' libtool=no @AMDEPBACKSLASH@
+gui/3Depict-glPane.obj: gui/glPane.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/3Depict-glPane.obj -MD -MP -MF gui/$(DEPDIR)/3Depict-glPane.Tpo -c -o gui/3Depict-glPane.obj `if test -f 'gui/glPane.cpp'; then $(CYGPATH_W) 'gui/glPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/glPane.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/$(DEPDIR)/3Depict-glPane.Tpo gui/$(DEPDIR)/3Depict-glPane.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/glPane.cpp' object='gui/3Depict-glPane.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-cropPanel.obj `if test -f 'gui/cropPanel.cpp'; then $(CYGPATH_W) 'gui/cropPanel.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/cropPanel.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/3Depict-glPane.obj `if test -f 'gui/glPane.cpp'; then $(CYGPATH_W) 'gui/glPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/glPane.cpp'; fi`
 
-3Depict-glPane.o: gui/glPane.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-glPane.o -MD -MP -MF $(DEPDIR)/3Depict-glPane.Tpo -c -o 3Depict-glPane.o `test -f 'gui/glPane.cpp' || echo '$(srcdir)/'`gui/glPane.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-glPane.Tpo $(DEPDIR)/3Depict-glPane.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/glPane.cpp' object='3Depict-glPane.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-ExportPos.o: gui/dialogs/ExportPos.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-ExportPos.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Tpo -c -o gui/dialogs/3Depict-ExportPos.o `test -f 'gui/dialogs/ExportPos.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportPos.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Tpo gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/ExportPos.cpp' object='gui/dialogs/3Depict-ExportPos.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-glPane.o `test -f 'gui/glPane.cpp' || echo '$(srcdir)/'`gui/glPane.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-ExportPos.o `test -f 'gui/dialogs/ExportPos.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportPos.cpp
 
-3Depict-glPane.obj: gui/glPane.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-glPane.obj -MD -MP -MF $(DEPDIR)/3Depict-glPane.Tpo -c -o 3Depict-glPane.obj `if test -f 'gui/glPane.cpp'; then $(CYGPATH_W) 'gui/glPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/glPane.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-glPane.Tpo $(DEPDIR)/3Depict-glPane.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/glPane.cpp' object='3Depict-glPane.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-ExportPos.obj: gui/dialogs/ExportPos.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-ExportPos.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Tpo -c -o gui/dialogs/3Depict-ExportPos.obj `if test -f 'gui/dialogs/ExportPos.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportPos.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportPos.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Tpo gui/dialogs/$(DEPDIR)/3Depict-ExportPos.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/ExportPos.cpp' object='gui/dialogs/3Depict-ExportPos.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-glPane.obj `if test -f 'gui/glPane.cpp'; then $(CYGPATH_W) 'gui/glPane.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/glPane.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-ExportPos.obj `if test -f 'gui/dialogs/ExportPos.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportPos.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportPos.cpp'; fi`
 
-3Depict-ExportPos.o: gui/dialogs/ExportPos.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ExportPos.o -MD -MP -MF $(DEPDIR)/3Depict-ExportPos.Tpo -c -o 3Depict-ExportPos.o `test -f 'gui/dialogs/ExportPos.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportPos.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ExportPos.Tpo $(DEPDIR)/3Depict-ExportPos.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/ExportPos.cpp' object='3Depict-ExportPos.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-ExportRngDialog.o: gui/dialogs/ExportRngDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-ExportRngDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Tpo -c -o gui/dialogs/3Depict-ExportRngDialog.o `test -f 'gui/dialogs/ExportRngDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportRngDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/ExportRngDialog.cpp' object='gui/dialogs/3Depict-ExportRngDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ExportPos.o `test -f 'gui/dialogs/ExportPos.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportPos.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-ExportRngDialog.o `test -f 'gui/dialogs/ExportRngDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportRngDialog.cpp
 
-3Depict-ExportPos.obj: gui/dialogs/ExportPos.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ExportPos.obj -MD -MP -MF $(DEPDIR)/3Depict-ExportPos.Tpo -c -o 3Depict-ExportPos.obj `if test -f 'gui/dialogs/ExportPos.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportPos.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportPos.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ExportPos.Tpo $(DEPDIR)/3Depict-ExportPos.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/ExportPos.cpp' object='3Depict-ExportPos.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-ExportRngDialog.obj: gui/dialogs/ExportRngDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-ExportRngDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Tpo -c -o gui/dialogs/3Depict-ExportRngDialog.obj `if test -f 'gui/dialogs/ExportRngDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportRngDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportRngDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-ExportRngDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/ExportRngDialog.cpp' object='gui/dialogs/3Depict-ExportRngDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ExportPos.obj `if test -f 'gui/dialogs/ExportPos.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportPos.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportPos.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-ExportRngDialog.obj `if test -f 'gui/dialogs/ExportRngDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportRngDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportRngDialog.cpp'; fi`
 
-3Depict-ExportRngDialog.o: gui/dialogs/ExportRngDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ExportRngDialog.o -MD -MP -MF $(DEPDIR)/3Depict-ExportRngDialog.Tpo -c -o 3Depict-ExportRngDialog.o `test -f 'gui/dialogs/ExportRngDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportRngDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ExportRngDialog.Tpo $(DEPDIR)/3Depict-ExportRngDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/ExportRngDialog.cpp' object='3Depict-ExportRngDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-prefDialog.o: gui/dialogs/prefDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-prefDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Tpo -c -o gui/dialogs/3Depict-prefDialog.o `test -f 'gui/dialogs/prefDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/prefDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/prefDialog.cpp' object='gui/dialogs/3Depict-prefDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ExportRngDialog.o `test -f 'gui/dialogs/ExportRngDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/ExportRngDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-prefDialog.o `test -f 'gui/dialogs/prefDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/prefDialog.cpp
 
-3Depict-ExportRngDialog.obj: gui/dialogs/ExportRngDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ExportRngDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-ExportRngDialog.Tpo -c -o 3Depict-ExportRngDialog.obj `if test -f 'gui/dialogs/ExportRngDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportRngDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportRngDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ExportRngDialog.Tpo $(DEPDIR)/3Depict-ExportRngDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/ExportRngDialog.cpp' object='3Depict-ExportRngDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-prefDialog.obj: gui/dialogs/prefDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-prefDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Tpo -c -o gui/dialogs/3Depict-prefDialog.obj `if test -f 'gui/dialogs/prefDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/prefDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/prefDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-prefDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/prefDialog.cpp' object='gui/dialogs/3Depict-prefDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ExportRngDialog.obj `if test -f 'gui/dialogs/ExportRngDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/ExportRngDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/ExportRngDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-prefDialog.obj `if test -f 'gui/dialogs/prefDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/prefDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/prefDialog.cpp'; fi`
 
-3Depict-prefDialog.o: gui/dialogs/prefDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-prefDialog.o -MD -MP -MF $(DEPDIR)/3Depict-prefDialog.Tpo -c -o 3Depict-prefDialog.o `test -f 'gui/dialogs/prefDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/prefDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-prefDialog.Tpo $(DEPDIR)/3Depict-prefDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/prefDialog.cpp' object='3Depict-prefDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-resolutionDialog.o: gui/dialogs/resolutionDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-resolutionDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Tpo -c -o gui/dialogs/3Depict-resolutionDialog.o `test -f 'gui/dialogs/resolutionDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/resolutionDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/resolutionDialog.cpp' object='gui/dialogs/3Depict-resolutionDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-prefDialog.o `test -f 'gui/dialogs/prefDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/prefDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-resolutionDialog.o `test -f 'gui/dialogs/resolutionDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/resolutionDialog.cpp
 
-3Depict-prefDialog.obj: gui/dialogs/prefDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-prefDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-prefDialog.Tpo -c -o 3Depict-prefDialog.obj `if test -f 'gui/dialogs/prefDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/prefDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/prefDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-prefDialog.Tpo $(DEPDIR)/3Depict-prefDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/prefDialog.cpp' object='3Depict-prefDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-resolutionDialog.obj: gui/dialogs/resolutionDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-resolutionDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Tpo -c -o gui/dialogs/3Depict-resolutionDialog.obj `if test -f 'gui/dialogs/resolutionDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/resolutionDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/resolutionDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-resolutionDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/resolutionDialog.cpp' object='gui/dialogs/3Depict-resolutionDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-prefDialog.obj `if test -f 'gui/dialogs/prefDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/prefDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/prefDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-resolutionDialog.obj `if test -f 'gui/dialogs/resolutionDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/resolutionDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/resolutionDialog.cpp'; fi`
 
-3Depict-resolutionDialog.o: gui/dialogs/resolutionDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-resolutionDialog.o -MD -MP -MF $(DEPDIR)/3Depict-resolutionDialog.Tpo -c -o 3Depict-resolutionDialog.o `test -f 'gui/dialogs/resolutionDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/resolutionDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-resolutionDialog.Tpo $(DEPDIR)/3Depict-resolutionDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/resolutionDialog.cpp' object='3Depict-resolutionDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-StashDialog.o: gui/dialogs/StashDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-StashDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Tpo -c -o gui/dialogs/3Depict-StashDialog.o `test -f 'gui/dialogs/StashDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/StashDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/StashDialog.cpp' object='gui/dialogs/3Depict-StashDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-resolutionDialog.o `test -f 'gui/dialogs/resolutionDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/resolutionDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-StashDialog.o `test -f 'gui/dialogs/StashDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/StashDialog.cpp
 
-3Depict-resolutionDialog.obj: gui/dialogs/resolutionDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-resolutionDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-resolutionDialog.Tpo -c -o 3Depict-resolutionDialog.obj `if test -f 'gui/dialogs/resolutionDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/resolutionDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/resolutionDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-resolutionDialog.Tpo $(DEPDIR)/3Depict-resolutionDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/resolutionDialog.cpp' object='3Depict-resolutionDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-StashDialog.obj: gui/dialogs/StashDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-StashDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Tpo -c -o gui/dialogs/3Depict-StashDialog.obj `if test -f 'gui/dialogs/StashDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/StashDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/StashDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-StashDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/StashDialog.cpp' object='gui/dialogs/3Depict-StashDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-resolutionDialog.obj `if test -f 'gui/dialogs/resolutionDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/resolutionDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/resolutionDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-StashDialog.obj `if test -f 'gui/dialogs/StashDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/StashDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/StashDialog.cpp'; fi`
 
-3Depict-StashDialog.o: gui/dialogs/StashDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-StashDialog.o -MD -MP -MF $(DEPDIR)/3Depict-StashDialog.Tpo -c -o 3Depict-StashDialog.o `test -f 'gui/dialogs/StashDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/StashDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-StashDialog.Tpo $(DEPDIR)/3Depict-StashDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/StashDialog.cpp' object='3Depict-StashDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-autosaveDialog.o: gui/dialogs/autosaveDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-autosaveDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Tpo -c -o gui/dialogs/3Depict-autosaveDialog.o `test -f 'gui/dialogs/autosaveDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/autosaveDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/autosaveDialog.cpp' object='gui/dialogs/3Depict-autosaveDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-StashDialog.o `test -f 'gui/dialogs/StashDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/StashDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-autosaveDialog.o `test -f 'gui/dialogs/autosaveDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/autosaveDialog.cpp
 
-3Depict-StashDialog.obj: gui/dialogs/StashDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-StashDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-StashDialog.Tpo -c -o 3Depict-StashDialog.obj `if test -f 'gui/dialogs/StashDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/StashDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/StashDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-StashDialog.Tpo $(DEPDIR)/3Depict-StashDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/StashDialog.cpp' object='3Depict-StashDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-autosaveDialog.obj: gui/dialogs/autosaveDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-autosaveDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Tpo -c -o gui/dialogs/3Depict-autosaveDialog.obj `if test -f 'gui/dialogs/autosaveDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/autosaveDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/autosaveDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-autosaveDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/autosaveDialog.cpp' object='gui/dialogs/3Depict-autosaveDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-StashDialog.obj `if test -f 'gui/dialogs/StashDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/StashDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/StashDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-autosaveDialog.obj `if test -f 'gui/dialogs/autosaveDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/autosaveDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/autosaveDialog.cpp'; fi`
 
-3Depict-autosaveDialog.o: gui/dialogs/autosaveDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-autosaveDialog.o -MD -MP -MF $(DEPDIR)/3Depict-autosaveDialog.Tpo -c -o 3Depict-autosaveDialog.o `test -f 'gui/dialogs/autosaveDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/autosaveDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-autosaveDialog.Tpo $(DEPDIR)/3Depict-autosaveDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/autosaveDialog.cpp' object='3Depict-autosaveDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-filterErrorDialog.o: gui/dialogs/filterErrorDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-filterErrorDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Tpo -c -o gui/dialogs/3Depict-filterErrorDialog.o `test -f 'gui/dialogs/filterErrorDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/filterErrorDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/filterErrorDialog.cpp' object='gui/dialogs/3Depict-filterErrorDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-autosaveDialog.o `test -f 'gui/dialogs/autosaveDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/autosaveDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-filterErrorDialog.o `test -f 'gui/dialogs/filterErrorDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/filterErrorDialog.cpp
 
-3Depict-autosaveDialog.obj: gui/dialogs/autosaveDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-autosaveDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-autosaveDialog.Tpo -c -o 3Depict-autosaveDialog.obj `if test -f 'gui/dialogs/autosaveDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/autosaveDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/autosaveDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-autosaveDialog.Tpo $(DEPDIR)/3Depict-autosaveDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/autosaveDialog.cpp' object='3Depict-autosaveDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-filterErrorDialog.obj: gui/dialogs/filterErrorDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-filterErrorDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Tpo -c -o gui/dialogs/3Depict-filterErrorDialog.obj `if test -f 'gui/dialogs/filterErrorDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/filterErrorDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/filterErrorDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-filterErrorDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/filterErrorDialog.cpp' object='gui/dialogs/3Depict-filterErrorDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-autosaveDialog.obj `if test -f 'gui/dialogs/autosaveDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/autosaveDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/autosaveDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-filterErrorDialog.obj `if test -f 'gui/dialogs/filterErrorDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/filterErrorDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/filterErrorDialog.cpp'; fi`
 
-3Depict-filterErrorDialog.o: gui/dialogs/filterErrorDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filterErrorDialog.o -MD -MP -MF $(DEPDIR)/3Depict-filterErrorDialog.Tpo -c -o 3Depict-filterErrorDialog.o `test -f 'gui/dialogs/filterErrorDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/filterErrorDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filterErrorDialog.Tpo $(DEPDIR)/3Depict-filterErrorDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/filterErrorDialog.cpp' object='3Depict-filterErrorDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-animateFilterDialog.o: gui/dialogs/animateFilterDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-animateFilterDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Tpo -c -o gui/dialogs/3Depict-animateFilterDialog.o `test -f 'gui/dialogs/animateFilterDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateFilterDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateFilterDialog.cpp' object='gui/dialogs/3Depict-animateFilterDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filterErrorDialog.o `test -f 'gui/dialogs/filterErrorDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/filterErrorDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-animateFilterDialog.o `test -f 'gui/dialogs/animateFilterDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateFilterDialog.cpp
 
-3Depict-filterErrorDialog.obj: gui/dialogs/filterErrorDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filterErrorDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-filterErrorDialog.Tpo -c -o 3Depict-filterErrorDialog.obj `if test -f 'gui/dialogs/filterErrorDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/filterErrorDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/filterErrorDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filterErrorDialog.Tpo $(DEPDIR)/3Depict-filterErrorDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/filterErrorDialog.cpp' object='3Depict-filterErrorDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-animateFilterDialog.obj: gui/dialogs/animateFilterDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-animateFilterDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Tpo -c -o gui/dialogs/3Depict-animateFilterDialog.obj `if test -f 'gui/dialogs/animateFilterDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateFilterDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateFilterDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-animateFilterDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateFilterDialog.cpp' object='gui/dialogs/3Depict-animateFilterDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filterErrorDialog.obj `if test -f 'gui/dialogs/filterErrorDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/filterErrorDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/filterErrorDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-animateFilterDialog.obj `if test -f 'gui/dialogs/animateFilterDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateFilterDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateFilterDialog.cpp'; fi`
 
-3Depict-animateFilterDialog.o: gui/dialogs/animateFilterDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-animateFilterDialog.o -MD -MP -MF $(DEPDIR)/3Depict-animateFilterDialog.Tpo -c -o 3Depict-animateFilterDialog.o `test -f 'gui/dialogs/animateFilterDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateFilterDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-animateFilterDialog.Tpo $(DEPDIR)/3Depict-animateFilterDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateFilterDialog.cpp' object='3Depict-animateFilterDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.o: gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.o -MD -MP -MF gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo -c -o gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' object='gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-animateFilterDialog.o `test -f 'gui/dialogs/animateFilterDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateFilterDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
 
-3Depict-animateFilterDialog.obj: gui/dialogs/animateFilterDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-animateFilterDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-animateFilterDialog.Tpo -c -o 3Depict-animateFilterDialog.obj `if test -f 'gui/dialogs/animateFilterDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateFilterDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateFilterDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-animateFilterDialog.Tpo $(DEPDIR)/3Depict-animateFilterDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateFilterDialog.cpp' object='3Depict-animateFilterDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.obj: gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.obj -MD -MP -MF gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo -c -o gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/colourKeyFram [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-colourKeyFrameDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' object='gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-animateFilterDialog.obj `if test -f 'gui/dialogs/animateFilterDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateFilterDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateFilterDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/animateSubDialogs/3Depict-colourKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; fi`
 
-3Depict-colourKeyFrameDialog.o: gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-colourKeyFrameDialog.o -MD -MP -MF $(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo -c -o 3Depict-colourKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo $(DEPDIR)/3Depict-colourKeyFrameDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' object='3Depict-colourKeyFrameDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.o: gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.o -MD -MP -MF gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo -c -o gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' object='gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-colourKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
 
-3Depict-colourKeyFrameDialog.obj: gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-colourKeyFrameDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo -c -o 3Depict-colourKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-colourKeyFrameDialog.Tpo $(DEPDIR)/3Depict-colourKeyFrameDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp' object='3Depict-colourKeyFrameDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.obj: gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.obj -MD -MP -MF gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo -c -o gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/stringKeyFram [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-stringKeyFrameDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' object='gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-colourKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/animateSubDialogs/3Depict-stringKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; fi`
 
-3Depict-stringKeyFrameDialog.o: gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-stringKeyFrameDialog.o -MD -MP -MF $(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo -c -o 3Depict-stringKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo $(DEPDIR)/3Depict-stringKeyFrameDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' object='3Depict-stringKeyFrameDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.o: gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.o -MD -MP -MF gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo -c -o gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' object='gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-stringKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
 
-3Depict-stringKeyFrameDialog.obj: gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-stringKeyFrameDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo -c -o 3Depict-stringKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-stringKeyFrameDialog.Tpo $(DEPDIR)/3Depict-stringKeyFrameDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp' object='3Depict-stringKeyFrameDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.obj: gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.obj -MD -MP -MF gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo -c -o gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/choiceKeyFram [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo gui/dialogs/animateSubDialogs/$(DEPDIR)/3Depict-choiceKeyFrameDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' object='gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-stringKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/animateSubDialogs/3Depict-choiceKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; fi`
 
-3Depict-choiceKeyFrameDialog.o: gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-choiceKeyFrameDialog.o -MD -MP -MF $(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo -c -o 3Depict-choiceKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo $(DEPDIR)/3Depict-choiceKeyFrameDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' object='3Depict-choiceKeyFrameDialog.o' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-rangeEditDialog.o: gui/dialogs/rangeEditDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-rangeEditDialog.o -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Tpo -c -o gui/dialogs/3Depict-rangeEditDialog.o `test -f 'gui/dialogs/rangeEditDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/rangeEditDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/rangeEditDialog.cpp' object='gui/dialogs/3Depict-rangeEditDialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-choiceKeyFrameDialog.o `test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-rangeEditDialog.o `test -f 'gui/dialogs/rangeEditDialog.cpp' || echo '$(srcdir)/'`gui/dialogs/rangeEditDialog.cpp
 
-3Depict-choiceKeyFrameDialog.obj: gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-choiceKeyFrameDialog.obj -MD -MP -MF $(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo -c -o 3Depict-choiceKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-choiceKeyFrameDialog.Tpo $(DEPDIR)/3Depict-choiceKeyFrameDialog.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp' object='3Depict-choiceKeyFrameDialog.obj' libtool=no @AMDEPBACKSLASH@
+gui/dialogs/3Depict-rangeEditDialog.obj: gui/dialogs/rangeEditDialog.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gui/dialogs/3Depict-rangeEditDialog.obj -MD -MP -MF gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Tpo -c -o gui/dialogs/3Depict-rangeEditDialog.obj `if test -f 'gui/dialogs/rangeEditDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/rangeEditDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/rangeEditDialog.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Tpo gui/dialogs/$(DEPDIR)/3Depict-rangeEditDialog.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gui/dialogs/rangeEditDialog.cpp' object='gui/dialogs/3Depict-rangeEditDialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-choiceKeyFrameDialog.obj `if test -f 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gui/dialogs/3Depict-rangeEditDialog.obj `if test -f 'gui/dialogs/rangeEditDialog.cpp'; then $(CYGPATH_W) 'gui/dialogs/rangeEditDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialogs/rangeEditDialog.cpp'; fi`
 
-3Depict-allFilter.o: backend/filters/allFilter.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-allFilter.o -MD -MP -MF $(DEPDIR)/3Depict-allFilter.Tpo -c -o 3Depict-allFilter.o `test -f 'backend/filters/allFilter.cpp' || echo '$(srcdir)/'`backend/filters/allFilter.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-allFilter.Tpo $(DEPDIR)/3Depict-allFilter.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/allFilter.cpp' object='3Depict-allFilter.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-allFilter.o: backend/filters/allFilter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-allFilter.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-allFilter.Tpo -c -o backend/filters/3Depict-allFilter.o `test -f 'backend/filters/allFilter.cpp' || echo '$(srcdir)/'`backend/filters/allFilter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-allFilter.Tpo backend/filters/$(DEPDIR)/3Depict-allFilter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/allFilter.cpp' object='backend/filters/3Depict-allFilter.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-allFilter.o `test -f 'backend/filters/allFilter.cpp' || echo '$(srcdir)/'`backend/filters/allFilter.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-allFilter.o `test -f 'backend/filters/allFilter.cpp' || echo '$(srcdir)/'`backend/filters/allFilter.cpp
 
-3Depict-allFilter.obj: backend/filters/allFilter.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-allFilter.obj -MD -MP -MF $(DEPDIR)/3Depict-allFilter.Tpo -c -o 3Depict-allFilter.obj `if test -f 'backend/filters/allFilter.cpp'; then $(CYGPATH_W) 'backend/filters/allFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/allFilter.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-allFilter.Tpo $(DEPDIR)/3Depict-allFilter.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/allFilter.cpp' object='3Depict-allFilter.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-allFilter.obj: backend/filters/allFilter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-allFilter.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-allFilter.Tpo -c -o backend/filters/3Depict-allFilter.obj `if test -f 'backend/filters/allFilter.cpp'; then $(CYGPATH_W) 'backend/filters/allFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/allFilter.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-allFilter.Tpo backend/filters/$(DEPDIR)/3Depict-allFilter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/allFilter.cpp' object='backend/filters/3Depict-allFilter.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-allFilter.obj `if test -f 'backend/filters/allFilter.cpp'; then $(CYGPATH_W) 'backend/filters/allFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/allFilter.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-allFilter.obj `if test -f 'backend/filters/allFilter.cpp'; then $(CYGPATH_W) 'backend/filters/allFilter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/allFilter.cpp'; fi`
 
-3Depict-filterCommon.o: backend/filters/filterCommon.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filterCommon.o -MD -MP -MF $(DEPDIR)/3Depict-filterCommon.Tpo -c -o 3Depict-filterCommon.o `test -f 'backend/filters/filterCommon.cpp' || echo '$(srcdir)/'`backend/filters/filterCommon.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filterCommon.Tpo $(DEPDIR)/3Depict-filterCommon.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/filterCommon.cpp' object='3Depict-filterCommon.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-filterCommon.o: backend/filters/filterCommon.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-filterCommon.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-filterCommon.Tpo -c -o backend/filters/3Depict-filterCommon.o `test -f 'backend/filters/filterCommon.cpp' || echo '$(srcdir)/'`backend/filters/filterCommon.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-filterCommon.Tpo backend/filters/$(DEPDIR)/3Depict-filterCommon.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/filterCommon.cpp' object='backend/filters/3Depict-filterCommon.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filterCommon.o `test -f 'backend/filters/filterCommon.cpp' || echo '$(srcdir)/'`backend/filters/filterCommon.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-filterCommon.o `test -f 'backend/filters/filterCommon.cpp' || echo '$(srcdir)/'`backend/filters/filterCommon.cpp
 
-3Depict-filterCommon.obj: backend/filters/filterCommon.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filterCommon.obj -MD -MP -MF $(DEPDIR)/3Depict-filterCommon.Tpo -c -o 3Depict-filterCommon.obj `if test -f 'backend/filters/filterCommon.cpp'; then $(CYGPATH_W) 'backend/filters/filterCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/filterCommon.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filterCommon.Tpo $(DEPDIR)/3Depict-filterCommon.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/filterCommon.cpp' object='3Depict-filterCommon.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-filterCommon.obj: backend/filters/filterCommon.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-filterCommon.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-filterCommon.Tpo -c -o backend/filters/3Depict-filterCommon.obj `if test -f 'backend/filters/filterCommon.cpp'; then $(CYGPATH_W) 'backend/filters/filterCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/filterCommon.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-filterCommon.Tpo backend/filters/$(DEPDIR)/3Depict-filterCommon.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/filterCommon.cpp' object='backend/filters/3Depict-filterCommon.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filterCommon.obj `if test -f 'backend/filters/filterCommon.cpp'; then $(CYGPATH_W) 'backend/filters/filterCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/filterCommon.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-filterCommon.obj `if test -f 'backend/filters/filterCommon.cpp'; then $(CYGPATH_W) 'backend/filters/filterCommon.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/filterCommon.cpp'; fi`
 
-3Depict-dataLoad.o: backend/filters/dataLoad.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-dataLoad.o -MD -MP -MF $(DEPDIR)/3Depict-dataLoad.Tpo -c -o 3Depict-dataLoad.o `test -f 'backend/filters/dataLoad.cpp' || echo '$(srcdir)/'`backend/filters/dataLoad.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-dataLoad.Tpo $(DEPDIR)/3Depict-dataLoad.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/dataLoad.cpp' object='3Depict-dataLoad.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-dataLoad.o: backend/filters/dataLoad.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-dataLoad.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-dataLoad.Tpo -c -o backend/filters/3Depict-dataLoad.o `test -f 'backend/filters/dataLoad.cpp' || echo '$(srcdir)/'`backend/filters/dataLoad.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-dataLoad.Tpo backend/filters/$(DEPDIR)/3Depict-dataLoad.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/dataLoad.cpp' object='backend/filters/3Depict-dataLoad.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-dataLoad.o `test -f 'backend/filters/dataLoad.cpp' || echo '$(srcdir)/'`backend/filters/dataLoad.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-dataLoad.o `test -f 'backend/filters/dataLoad.cpp' || echo '$(srcdir)/'`backend/filters/dataLoad.cpp
 
-3Depict-dataLoad.obj: backend/filters/dataLoad.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-dataLoad.obj -MD -MP -MF $(DEPDIR)/3Depict-dataLoad.Tpo -c -o 3Depict-dataLoad.obj `if test -f 'backend/filters/dataLoad.cpp'; then $(CYGPATH_W) 'backend/filters/dataLoad.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/dataLoad.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-dataLoad.Tpo $(DEPDIR)/3Depict-dataLoad.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/dataLoad.cpp' object='3Depict-dataLoad.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-dataLoad.obj: backend/filters/dataLoad.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-dataLoad.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-dataLoad.Tpo -c -o backend/filters/3Depict-dataLoad.obj `if test -f 'backend/filters/dataLoad.cpp'; then $(CYGPATH_W) 'backend/filters/dataLoad.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/dataLoad.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-dataLoad.Tpo backend/filters/$(DEPDIR)/3Depict-dataLoad.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/dataLoad.cpp' object='backend/filters/3Depict-dataLoad.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-dataLoad.obj `if test -f 'backend/filters/dataLoad.cpp'; then $(CYGPATH_W) 'backend/filters/dataLoad.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/dataLoad.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-dataLoad.obj `if test -f 'backend/filters/dataLoad.cpp'; then $(CYGPATH_W) 'backend/filters/dataLoad.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/dataLoad.cpp'; fi`
 
-3Depict-ionDownsample.o: backend/filters/ionDownsample.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionDownsample.o -MD -MP -MF $(DEPDIR)/3Depict-ionDownsample.Tpo -c -o 3Depict-ionDownsample.o `test -f 'backend/filters/ionDownsample.cpp' || echo '$(srcdir)/'`backend/filters/ionDownsample.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionDownsample.Tpo $(DEPDIR)/3Depict-ionDownsample.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionDownsample.cpp' object='3Depict-ionDownsample.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionDownsample.o: backend/filters/ionDownsample.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionDownsample.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionDownsample.Tpo -c -o backend/filters/3Depict-ionDownsample.o `test -f 'backend/filters/ionDownsample.cpp' || echo '$(srcdir)/'`backend/filters/ionDownsample.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionDownsample.Tpo backend/filters/$(DEPDIR)/3Depict-ionDownsample.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionDownsample.cpp' object='backend/filters/3Depict-ionDownsample.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionDownsample.o `test -f 'backend/filters/ionDownsample.cpp' || echo '$(srcdir)/'`backend/filters/ionDownsample.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionDownsample.o `test -f 'backend/filters/ionDownsample.cpp' || echo '$(srcdir)/'`backend/filters/ionDownsample.cpp
 
-3Depict-ionDownsample.obj: backend/filters/ionDownsample.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionDownsample.obj -MD -MP -MF $(DEPDIR)/3Depict-ionDownsample.Tpo -c -o 3Depict-ionDownsample.obj `if test -f 'backend/filters/ionDownsample.cpp'; then $(CYGPATH_W) 'backend/filters/ionDownsample.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionDownsample.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionDownsample.Tpo $(DEPDIR)/3Depict-ionDownsample.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionDownsample.cpp' object='3Depict-ionDownsample.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionDownsample.obj: backend/filters/ionDownsample.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionDownsample.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionDownsample.Tpo -c -o backend/filters/3Depict-ionDownsample.obj `if test -f 'backend/filters/ionDownsample.cpp'; then $(CYGPATH_W) 'backend/filters/ionDownsample.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionDownsample.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionDownsample.Tpo backend/filters/$(DEPDIR)/3Depict-ionDownsample.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionDownsample.cpp' object='backend/filters/3Depict-ionDownsample.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionDownsample.obj `if test -f 'backend/filters/ionDownsample.cpp'; then $(CYGPATH_W) 'backend/filters/ionDownsample.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionDownsample.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionDownsample.obj `if test -f 'backend/filters/ionDownsample.cpp'; then $(CYGPATH_W) 'backend/filters/ionDownsample.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionDownsample.cpp'; fi`
 
-3Depict-rangeFile.o: backend/filters/rangeFile.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-rangeFile.o -MD -MP -MF $(DEPDIR)/3Depict-rangeFile.Tpo -c -o 3Depict-rangeFile.o `test -f 'backend/filters/rangeFile.cpp' || echo '$(srcdir)/'`backend/filters/rangeFile.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-rangeFile.Tpo $(DEPDIR)/3Depict-rangeFile.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/rangeFile.cpp' object='3Depict-rangeFile.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-rangeFile.o: backend/filters/rangeFile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-rangeFile.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-rangeFile.Tpo -c -o backend/filters/3Depict-rangeFile.o `test -f 'backend/filters/rangeFile.cpp' || echo '$(srcdir)/'`backend/filters/rangeFile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-rangeFile.Tpo backend/filters/$(DEPDIR)/3Depict-rangeFile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/rangeFile.cpp' object='backend/filters/3Depict-rangeFile.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-rangeFile.o `test -f 'backend/filters/rangeFile.cpp' || echo '$(srcdir)/'`backend/filters/rangeFile.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-rangeFile.o `test -f 'backend/filters/rangeFile.cpp' || echo '$(srcdir)/'`backend/filters/rangeFile.cpp
 
-3Depict-rangeFile.obj: backend/filters/rangeFile.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-rangeFile.obj -MD -MP -MF $(DEPDIR)/3Depict-rangeFile.Tpo -c -o 3Depict-rangeFile.obj `if test -f 'backend/filters/rangeFile.cpp'; then $(CYGPATH_W) 'backend/filters/rangeFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/rangeFile.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-rangeFile.Tpo $(DEPDIR)/3Depict-rangeFile.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/rangeFile.cpp' object='3Depict-rangeFile.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-rangeFile.obj: backend/filters/rangeFile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-rangeFile.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-rangeFile.Tpo -c -o backend/filters/3Depict-rangeFile.obj `if test -f 'backend/filters/rangeFile.cpp'; then $(CYGPATH_W) 'backend/filters/rangeFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/rangeFile.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-rangeFile.Tpo backend/filters/$(DEPDIR)/3Depict-rangeFile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/rangeFile.cpp' object='backend/filters/3Depict-rangeFile.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-rangeFile.obj `if test -f 'backend/filters/rangeFile.cpp'; then $(CYGPATH_W) 'backend/filters/rangeFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/rangeFile.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-rangeFile.obj `if test -f 'backend/filters/rangeFile.cpp'; then $(CYGPATH_W) 'backend/filters/rangeFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/rangeFile.cpp'; fi`
 
-3Depict-voxelise.o: backend/filters/voxelise.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-voxelise.o -MD -MP -MF $(DEPDIR)/3Depict-voxelise.Tpo -c -o 3Depict-voxelise.o `test -f 'backend/filters/voxelise.cpp' || echo '$(srcdir)/'`backend/filters/voxelise.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-voxelise.Tpo $(DEPDIR)/3Depict-voxelise.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/voxelise.cpp' object='3Depict-voxelise.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-voxelise.o: backend/filters/voxelise.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-voxelise.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-voxelise.Tpo -c -o backend/filters/3Depict-voxelise.o `test -f 'backend/filters/voxelise.cpp' || echo '$(srcdir)/'`backend/filters/voxelise.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-voxelise.Tpo backend/filters/$(DEPDIR)/3Depict-voxelise.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/voxelise.cpp' object='backend/filters/3Depict-voxelise.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-voxelise.o `test -f 'backend/filters/voxelise.cpp' || echo '$(srcdir)/'`backend/filters/voxelise.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-voxelise.o `test -f 'backend/filters/voxelise.cpp' || echo '$(srcdir)/'`backend/filters/voxelise.cpp
 
-3Depict-voxelise.obj: backend/filters/voxelise.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-voxelise.obj -MD -MP -MF $(DEPDIR)/3Depict-voxelise.Tpo -c -o 3Depict-voxelise.obj `if test -f 'backend/filters/voxelise.cpp'; then $(CYGPATH_W) 'backend/filters/voxelise.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/voxelise.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-voxelise.Tpo $(DEPDIR)/3Depict-voxelise.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/voxelise.cpp' object='3Depict-voxelise.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-voxelise.obj: backend/filters/voxelise.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-voxelise.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-voxelise.Tpo -c -o backend/filters/3Depict-voxelise.obj `if test -f 'backend/filters/voxelise.cpp'; then $(CYGPATH_W) 'backend/filters/voxelise.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/voxelise.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-voxelise.Tpo backend/filters/$(DEPDIR)/3Depict-voxelise.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/voxelise.cpp' object='backend/filters/3Depict-voxelise.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-voxelise.obj `if test -f 'backend/filters/voxelise.cpp'; then $(CYGPATH_W) 'backend/filters/voxelise.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/voxelise.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-voxelise.obj `if test -f 'backend/filters/voxelise.cpp'; then $(CYGPATH_W) 'backend/filters/voxelise.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/voxelise.cpp'; fi`
 
-3Depict-spectrumPlot.o: backend/filters/spectrumPlot.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-spectrumPlot.o -MD -MP -MF $(DEPDIR)/3Depict-spectrumPlot.Tpo -c -o 3Depict-spectrumPlot.o `test -f 'backend/filters/spectrumPlot.cpp' || echo '$(srcdir)/'`backend/filters/spectrumPlot.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-spectrumPlot.Tpo $(DEPDIR)/3Depict-spectrumPlot.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/spectrumPlot.cpp' object='3Depict-spectrumPlot.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-spectrumPlot.o: backend/filters/spectrumPlot.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-spectrumPlot.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Tpo -c -o backend/filters/3Depict-spectrumPlot.o `test -f 'backend/filters/spectrumPlot.cpp' || echo '$(srcdir)/'`backend/filters/spectrumPlot.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Tpo backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/spectrumPlot.cpp' object='backend/filters/3Depict-spectrumPlot.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-spectrumPlot.o `test -f 'backend/filters/spectrumPlot.cpp' || echo '$(srcdir)/'`backend/filters/spectrumPlot.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-spectrumPlot.o `test -f 'backend/filters/spectrumPlot.cpp' || echo '$(srcdir)/'`backend/filters/spectrumPlot.cpp
 
-3Depict-spectrumPlot.obj: backend/filters/spectrumPlot.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-spectrumPlot.obj -MD -MP -MF $(DEPDIR)/3Depict-spectrumPlot.Tpo -c -o 3Depict-spectrumPlot.obj `if test -f 'backend/filters/spectrumPlot.cpp'; then $(CYGPATH_W) 'backend/filters/spectrumPlot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spectrumPlot.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-spectrumPlot.Tpo $(DEPDIR)/3Depict-spectrumPlot.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/spectrumPlot.cpp' object='3Depict-spectrumPlot.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-spectrumPlot.obj: backend/filters/spectrumPlot.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-spectrumPlot.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Tpo -c -o backend/filters/3Depict-spectrumPlot.obj `if test -f 'backend/filters/spectrumPlot.cpp'; then $(CYGPATH_W) 'backend/filters/spectrumPlot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spectrumPlot.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Tpo backend/filters/$(DEPDIR)/3Depict-spectrumPlot.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/spectrumPlot.cpp' object='backend/filters/3Depict-spectrumPlot.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-spectrumPlot.obj `if test -f 'backend/filters/spectrumPlot.cpp'; then $(CYGPATH_W) 'backend/filters/spectrumPlot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spectrumPlot.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-spectrumPlot.obj `if test -f 'backend/filters/spectrumPlot.cpp'; then $(CYGPATH_W) 'backend/filters/spectrumPlot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spectrumPlot.cpp'; fi`
 
-3Depict-transform.o: backend/filters/transform.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-transform.o -MD -MP -MF $(DEPDIR)/3Depict-transform.Tpo -c -o 3Depict-transform.o `test -f 'backend/filters/transform.cpp' || echo '$(srcdir)/'`backend/filters/transform.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-transform.Tpo $(DEPDIR)/3Depict-transform.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/transform.cpp' object='3Depict-transform.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-transform.o: backend/filters/transform.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-transform.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-transform.Tpo -c -o backend/filters/3Depict-transform.o `test -f 'backend/filters/transform.cpp' || echo '$(srcdir)/'`backend/filters/transform.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-transform.Tpo backend/filters/$(DEPDIR)/3Depict-transform.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/transform.cpp' object='backend/filters/3Depict-transform.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-transform.o `test -f 'backend/filters/transform.cpp' || echo '$(srcdir)/'`backend/filters/transform.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-transform.o `test -f 'backend/filters/transform.cpp' || echo '$(srcdir)/'`backend/filters/transform.cpp
 
-3Depict-transform.obj: backend/filters/transform.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-transform.obj -MD -MP -MF $(DEPDIR)/3Depict-transform.Tpo -c -o 3Depict-transform.obj `if test -f 'backend/filters/transform.cpp'; then $(CYGPATH_W) 'backend/filters/transform.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/transform.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-transform.Tpo $(DEPDIR)/3Depict-transform.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/transform.cpp' object='3Depict-transform.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-transform.obj: backend/filters/transform.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-transform.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-transform.Tpo -c -o backend/filters/3Depict-transform.obj `if test -f 'backend/filters/transform.cpp'; then $(CYGPATH_W) 'backend/filters/transform.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/transform.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-transform.Tpo backend/filters/$(DEPDIR)/3Depict-transform.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/transform.cpp' object='backend/filters/3Depict-transform.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-transform.obj `if test -f 'backend/filters/transform.cpp'; then $(CYGPATH_W) 'backend/filters/transform.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/transform.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-transform.obj `if test -f 'backend/filters/transform.cpp'; then $(CYGPATH_W) 'backend/filters/transform.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/transform.cpp'; fi`
 
-3Depict-externalProgram.o: backend/filters/externalProgram.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-externalProgram.o -MD -MP -MF $(DEPDIR)/3Depict-externalProgram.Tpo -c -o 3Depict-externalProgram.o `test -f 'backend/filters/externalProgram.cpp' || echo '$(srcdir)/'`backend/filters/externalProgram.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-externalProgram.Tpo $(DEPDIR)/3Depict-externalProgram.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/externalProgram.cpp' object='3Depict-externalProgram.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-externalProgram.o: backend/filters/externalProgram.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-externalProgram.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-externalProgram.Tpo -c -o backend/filters/3Depict-externalProgram.o `test -f 'backend/filters/externalProgram.cpp' || echo '$(srcdir)/'`backend/filters/externalProgram.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-externalProgram.Tpo backend/filters/$(DEPDIR)/3Depict-externalProgram.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/externalProgram.cpp' object='backend/filters/3Depict-externalProgram.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-externalProgram.o `test -f 'backend/filters/externalProgram.cpp' || echo '$(srcdir)/'`backend/filters/externalProgram.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-externalProgram.o `test -f 'backend/filters/externalProgram.cpp' || echo '$(srcdir)/'`backend/filters/externalProgram.cpp
 
-3Depict-externalProgram.obj: backend/filters/externalProgram.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-externalProgram.obj -MD -MP -MF $(DEPDIR)/3Depict-externalProgram.Tpo -c -o 3Depict-externalProgram.obj `if test -f 'backend/filters/externalProgram.cpp'; then $(CYGPATH_W) 'backend/filters/externalProgram.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/externalProgram.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-externalProgram.Tpo $(DEPDIR)/3Depict-externalProgram.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/externalProgram.cpp' object='3Depict-externalProgram.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-externalProgram.obj: backend/filters/externalProgram.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-externalProgram.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-externalProgram.Tpo -c -o backend/filters/3Depict-externalProgram.obj `if test -f 'backend/filters/externalProgram.cpp'; then $(CYGPATH_W) 'backend/filters/externalProgram.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/externalProgram.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-externalProgram.Tpo backend/filters/$(DEPDIR)/3Depict-externalProgram.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/externalProgram.cpp' object='backend/filters/3Depict-externalProgram.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-externalProgram.obj `if test -f 'backend/filters/externalProgram.cpp'; then $(CYGPATH_W) 'backend/filters/externalProgram.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/externalProgram.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-externalProgram.obj `if test -f 'backend/filters/externalProgram.cpp'; then $(CYGPATH_W) 'backend/filters/externalProgram.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/externalProgram.cpp'; fi`
 
-3Depict-ionClip.o: backend/filters/ionClip.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionClip.o -MD -MP -MF $(DEPDIR)/3Depict-ionClip.Tpo -c -o 3Depict-ionClip.o `test -f 'backend/filters/ionClip.cpp' || echo '$(srcdir)/'`backend/filters/ionClip.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionClip.Tpo $(DEPDIR)/3Depict-ionClip.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionClip.cpp' object='3Depict-ionClip.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionClip.o: backend/filters/ionClip.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionClip.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionClip.Tpo -c -o backend/filters/3Depict-ionClip.o `test -f 'backend/filters/ionClip.cpp' || echo '$(srcdir)/'`backend/filters/ionClip.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionClip.Tpo backend/filters/$(DEPDIR)/3Depict-ionClip.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionClip.cpp' object='backend/filters/3Depict-ionClip.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionClip.o `test -f 'backend/filters/ionClip.cpp' || echo '$(srcdir)/'`backend/filters/ionClip.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionClip.o `test -f 'backend/filters/ionClip.cpp' || echo '$(srcdir)/'`backend/filters/ionClip.cpp
 
-3Depict-ionClip.obj: backend/filters/ionClip.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionClip.obj -MD -MP -MF $(DEPDIR)/3Depict-ionClip.Tpo -c -o 3Depict-ionClip.obj `if test -f 'backend/filters/ionClip.cpp'; then $(CYGPATH_W) 'backend/filters/ionClip.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionClip.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionClip.Tpo $(DEPDIR)/3Depict-ionClip.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionClip.cpp' object='3Depict-ionClip.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionClip.obj: backend/filters/ionClip.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionClip.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionClip.Tpo -c -o backend/filters/3Depict-ionClip.obj `if test -f 'backend/filters/ionClip.cpp'; then $(CYGPATH_W) 'backend/filters/ionClip.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionClip.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionClip.Tpo backend/filters/$(DEPDIR)/3Depict-ionClip.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionClip.cpp' object='backend/filters/3Depict-ionClip.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionClip.obj `if test -f 'backend/filters/ionClip.cpp'; then $(CYGPATH_W) 'backend/filters/ionClip.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionClip.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionClip.obj `if test -f 'backend/filters/ionClip.cpp'; then $(CYGPATH_W) 'backend/filters/ionClip.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionClip.cpp'; fi`
 
-3Depict-ionColour.o: backend/filters/ionColour.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionColour.o -MD -MP -MF $(DEPDIR)/3Depict-ionColour.Tpo -c -o 3Depict-ionColour.o `test -f 'backend/filters/ionColour.cpp' || echo '$(srcdir)/'`backend/filters/ionColour.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionColour.Tpo $(DEPDIR)/3Depict-ionColour.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionColour.cpp' object='3Depict-ionColour.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionColour.o: backend/filters/ionColour.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionColour.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionColour.Tpo -c -o backend/filters/3Depict-ionColour.o `test -f 'backend/filters/ionColour.cpp' || echo '$(srcdir)/'`backend/filters/ionColour.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionColour.Tpo backend/filters/$(DEPDIR)/3Depict-ionColour.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionColour.cpp' object='backend/filters/3Depict-ionColour.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionColour.o `test -f 'backend/filters/ionColour.cpp' || echo '$(srcdir)/'`backend/filters/ionColour.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionColour.o `test -f 'backend/filters/ionColour.cpp' || echo '$(srcdir)/'`backend/filters/ionColour.cpp
 
-3Depict-ionColour.obj: backend/filters/ionColour.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionColour.obj -MD -MP -MF $(DEPDIR)/3Depict-ionColour.Tpo -c -o 3Depict-ionColour.obj `if test -f 'backend/filters/ionColour.cpp'; then $(CYGPATH_W) 'backend/filters/ionColour.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionColour.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionColour.Tpo $(DEPDIR)/3Depict-ionColour.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionColour.cpp' object='3Depict-ionColour.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionColour.obj: backend/filters/ionColour.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionColour.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionColour.Tpo -c -o backend/filters/3Depict-ionColour.obj `if test -f 'backend/filters/ionColour.cpp'; then $(CYGPATH_W) 'backend/filters/ionColour.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionColour.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionColour.Tpo backend/filters/$(DEPDIR)/3Depict-ionColour.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionColour.cpp' object='backend/filters/3Depict-ionColour.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionColour.obj `if test -f 'backend/filters/ionColour.cpp'; then $(CYGPATH_W) 'backend/filters/ionColour.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionColour.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionColour.obj `if test -f 'backend/filters/ionColour.cpp'; then $(CYGPATH_W) 'backend/filters/ionColour.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionColour.cpp'; fi`
 
-3Depict-boundingBox.o: backend/filters/boundingBox.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-boundingBox.o -MD -MP -MF $(DEPDIR)/3Depict-boundingBox.Tpo -c -o 3Depict-boundingBox.o `test -f 'backend/filters/boundingBox.cpp' || echo '$(srcdir)/'`backend/filters/boundingBox.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-boundingBox.Tpo $(DEPDIR)/3Depict-boundingBox.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/boundingBox.cpp' object='3Depict-boundingBox.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-boundingBox.o: backend/filters/boundingBox.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-boundingBox.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-boundingBox.Tpo -c -o backend/filters/3Depict-boundingBox.o `test -f 'backend/filters/boundingBox.cpp' || echo '$(srcdir)/'`backend/filters/boundingBox.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-boundingBox.Tpo backend/filters/$(DEPDIR)/3Depict-boundingBox.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/boundingBox.cpp' object='backend/filters/3Depict-boundingBox.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-boundingBox.o `test -f 'backend/filters/boundingBox.cpp' || echo '$(srcdir)/'`backend/filters/boundingBox.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-boundingBox.o `test -f 'backend/filters/boundingBox.cpp' || echo '$(srcdir)/'`backend/filters/boundingBox.cpp
 
-3Depict-boundingBox.obj: backend/filters/boundingBox.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-boundingBox.obj -MD -MP -MF $(DEPDIR)/3Depict-boundingBox.Tpo -c -o 3Depict-boundingBox.obj `if test -f 'backend/filters/boundingBox.cpp'; then $(CYGPATH_W) 'backend/filters/boundingBox.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/boundingBox.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-boundingBox.Tpo $(DEPDIR)/3Depict-boundingBox.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/boundingBox.cpp' object='3Depict-boundingBox.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-boundingBox.obj: backend/filters/boundingBox.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-boundingBox.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-boundingBox.Tpo -c -o backend/filters/3Depict-boundingBox.obj `if test -f 'backend/filters/boundingBox.cpp'; then $(CYGPATH_W) 'backend/filters/boundingBox.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/boundingBox.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-boundingBox.Tpo backend/filters/$(DEPDIR)/3Depict-boundingBox.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/boundingBox.cpp' object='backend/filters/3Depict-boundingBox.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-boundingBox.obj `if test -f 'backend/filters/boundingBox.cpp'; then $(CYGPATH_W) 'backend/filters/boundingBox.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/boundingBox.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-boundingBox.obj `if test -f 'backend/filters/boundingBox.cpp'; then $(CYGPATH_W) 'backend/filters/boundingBox.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/boundingBox.cpp'; fi`
 
-3Depict-compositionProfile.o: backend/filters/compositionProfile.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-compositionProfile.o -MD -MP -MF $(DEPDIR)/3Depict-compositionProfile.Tpo -c -o 3Depict-compositionProfile.o `test -f 'backend/filters/compositionProfile.cpp' || echo '$(srcdir)/'`backend/filters/compositionProfile.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-compositionProfile.Tpo $(DEPDIR)/3Depict-compositionProfile.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/compositionProfile.cpp' object='3Depict-compositionProfile.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-compositionProfile.o: backend/filters/compositionProfile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-compositionProfile.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-compositionProfile.Tpo -c -o backend/filters/3Depict-compositionProfile.o `test -f 'backend/filters/compositionProfile.cpp' || echo '$(srcdir)/'`backend/filters/compositionProfile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-compositionProfile.Tpo backend/filters/$(DEPDIR)/3Depict-compositionProfile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/compositionProfile.cpp' object='backend/filters/3Depict-compositionProfile.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-compositionProfile.o `test -f 'backend/filters/compositionProfile.cpp' || echo '$(srcdir)/'`backend/filters/compositionProfile.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-compositionProfile.o `test -f 'backend/filters/compositionProfile.cpp' || echo '$(srcdir)/'`backend/filters/compositionProfile.cpp
 
-3Depict-compositionProfile.obj: backend/filters/compositionProfile.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-compositionProfile.obj -MD -MP -MF $(DEPDIR)/3Depict-compositionProfile.Tpo -c -o 3Depict-compositionProfile.obj `if test -f 'backend/filters/compositionProfile.cpp'; then $(CYGPATH_W) 'backend/filters/compositionProfile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/compositionProfile.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-compositionProfile.Tpo $(DEPDIR)/3Depict-compositionProfile.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/compositionProfile.cpp' object='3Depict-compositionProfile.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-compositionProfile.obj: backend/filters/compositionProfile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-compositionProfile.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-compositionProfile.Tpo -c -o backend/filters/3Depict-compositionProfile.obj `if test -f 'backend/filters/compositionProfile.cpp'; then $(CYGPATH_W) 'backend/filters/compositionProfile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/compositionProfile.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-compositionProfile.Tpo backend/filters/$(DEPDIR)/3Depict-compositionProfile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/compositionProfile.cpp' object='backend/filters/3Depict-compositionProfile.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-compositionProfile.obj `if test -f 'backend/filters/compositionProfile.cpp'; then $(CYGPATH_W) 'backend/filters/compositionProfile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/compositionProfile.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-compositionProfile.obj `if test -f 'backend/filters/compositionProfile.cpp'; then $(CYGPATH_W) 'backend/filters/compositionProfile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/compositionProfile.cpp'; fi`
 
-3Depict-spatialAnalysis.o: backend/filters/spatialAnalysis.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-spatialAnalysis.o -MD -MP -MF $(DEPDIR)/3Depict-spatialAnalysis.Tpo -c -o 3Depict-spatialAnalysis.o `test -f 'backend/filters/spatialAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/spatialAnalysis.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-spatialAnalysis.Tpo $(DEPDIR)/3Depict-spatialAnalysis.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/spatialAnalysis.cpp' object='3Depict-spatialAnalysis.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-spatialAnalysis.o: backend/filters/spatialAnalysis.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-spatialAnalysis.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Tpo -c -o backend/filters/3Depict-spatialAnalysis.o `test -f 'backend/filters/spatialAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/spatialAnalysis.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Tpo backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/spatialAnalysis.cpp' object='backend/filters/3Depict-spatialAnalysis.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-spatialAnalysis.o `test -f 'backend/filters/spatialAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/spatialAnalysis.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-spatialAnalysis.o `test -f 'backend/filters/spatialAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/spatialAnalysis.cpp
 
-3Depict-spatialAnalysis.obj: backend/filters/spatialAnalysis.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-spatialAnalysis.obj -MD -MP -MF $(DEPDIR)/3Depict-spatialAnalysis.Tpo -c -o 3Depict-spatialAnalysis.obj `if test -f 'backend/filters/spatialAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/spatialAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spatialAnalysis.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-spatialAnalysis.Tpo $(DEPDIR)/3Depict-spatialAnalysis.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/spatialAnalysis.cpp' object='3Depict-spatialAnalysis.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-spatialAnalysis.obj: backend/filters/spatialAnalysis.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-spatialAnalysis.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Tpo -c -o backend/filters/3Depict-spatialAnalysis.obj `if test -f 'backend/filters/spatialAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/spatialAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spatialAnalysis.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Tpo backend/filters/$(DEPDIR)/3Depict-spatialAnalysis.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/spatialAnalysis.cpp' object='backend/filters/3Depict-spatialAnalysis.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-spatialAnalysis.obj `if test -f 'backend/filters/spatialAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/spatialAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spatialAnalysis.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-spatialAnalysis.obj `if test -f 'backend/filters/spatialAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/spatialAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/spatialAnalysis.cpp'; fi`
 
-3Depict-clusterAnalysis.o: backend/filters/clusterAnalysis.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-clusterAnalysis.o -MD -MP -MF $(DEPDIR)/3Depict-clusterAnalysis.Tpo -c -o 3Depict-clusterAnalysis.o `test -f 'backend/filters/clusterAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/clusterAnalysis.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-clusterAnalysis.Tpo $(DEPDIR)/3Depict-clusterAnalysis.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/clusterAnalysis.cpp' object='3Depict-clusterAnalysis.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-clusterAnalysis.o: backend/filters/clusterAnalysis.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-clusterAnalysis.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Tpo -c -o backend/filters/3Depict-clusterAnalysis.o `test -f 'backend/filters/clusterAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/clusterAnalysis.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Tpo backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/clusterAnalysis.cpp' object='backend/filters/3Depict-clusterAnalysis.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-clusterAnalysis.o `test -f 'backend/filters/clusterAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/clusterAnalysis.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-clusterAnalysis.o `test -f 'backend/filters/clusterAnalysis.cpp' || echo '$(srcdir)/'`backend/filters/clusterAnalysis.cpp
 
-3Depict-clusterAnalysis.obj: backend/filters/clusterAnalysis.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-clusterAnalysis.obj -MD -MP -MF $(DEPDIR)/3Depict-clusterAnalysis.Tpo -c -o 3Depict-clusterAnalysis.obj `if test -f 'backend/filters/clusterAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/clusterAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/clusterAnalysis.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-clusterAnalysis.Tpo $(DEPDIR)/3Depict-clusterAnalysis.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/clusterAnalysis.cpp' object='3Depict-clusterAnalysis.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-clusterAnalysis.obj: backend/filters/clusterAnalysis.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-clusterAnalysis.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Tpo -c -o backend/filters/3Depict-clusterAnalysis.obj `if test -f 'backend/filters/clusterAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/clusterAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/clusterAnalysis.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Tpo backend/filters/$(DEPDIR)/3Depict-clusterAnalysis.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/clusterAnalysis.cpp' object='backend/filters/3Depict-clusterAnalysis.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-clusterAnalysis.obj `if test -f 'backend/filters/clusterAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/clusterAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/clusterAnalysis.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-clusterAnalysis.obj `if test -f 'backend/filters/clusterAnalysis.cpp'; then $(CYGPATH_W) 'backend/filters/clusterAnalysis.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/clusterAnalysis.cpp'; fi`
 
-3Depict-ionInfo.o: backend/filters/ionInfo.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionInfo.o -MD -MP -MF $(DEPDIR)/3Depict-ionInfo.Tpo -c -o 3Depict-ionInfo.o `test -f 'backend/filters/ionInfo.cpp' || echo '$(srcdir)/'`backend/filters/ionInfo.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionInfo.Tpo $(DEPDIR)/3Depict-ionInfo.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionInfo.cpp' object='3Depict-ionInfo.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionInfo.o: backend/filters/ionInfo.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionInfo.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionInfo.Tpo -c -o backend/filters/3Depict-ionInfo.o `test -f 'backend/filters/ionInfo.cpp' || echo '$(srcdir)/'`backend/filters/ionInfo.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionInfo.Tpo backend/filters/$(DEPDIR)/3Depict-ionInfo.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionInfo.cpp' object='backend/filters/3Depict-ionInfo.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionInfo.o `test -f 'backend/filters/ionInfo.cpp' || echo '$(srcdir)/'`backend/filters/ionInfo.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionInfo.o `test -f 'backend/filters/ionInfo.cpp' || echo '$(srcdir)/'`backend/filters/ionInfo.cpp
 
-3Depict-ionInfo.obj: backend/filters/ionInfo.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionInfo.obj -MD -MP -MF $(DEPDIR)/3Depict-ionInfo.Tpo -c -o 3Depict-ionInfo.obj `if test -f 'backend/filters/ionInfo.cpp'; then $(CYGPATH_W) 'backend/filters/ionInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionInfo.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionInfo.Tpo $(DEPDIR)/3Depict-ionInfo.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/ionInfo.cpp' object='3Depict-ionInfo.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-ionInfo.obj: backend/filters/ionInfo.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-ionInfo.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-ionInfo.Tpo -c -o backend/filters/3Depict-ionInfo.obj `if test -f 'backend/filters/ionInfo.cpp'; then $(CYGPATH_W) 'backend/filters/ionInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionInfo.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-ionInfo.Tpo backend/filters/$(DEPDIR)/3Depict-ionInfo.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/ionInfo.cpp' object='backend/filters/3Depict-ionInfo.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionInfo.obj `if test -f 'backend/filters/ionInfo.cpp'; then $(CYGPATH_W) 'backend/filters/ionInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionInfo.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-ionInfo.obj `if test -f 'backend/filters/ionInfo.cpp'; then $(CYGPATH_W) 'backend/filters/ionInfo.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/ionInfo.cpp'; fi`
 
-3Depict-annotation.o: backend/filters/annotation.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-annotation.o -MD -MP -MF $(DEPDIR)/3Depict-annotation.Tpo -c -o 3Depict-annotation.o `test -f 'backend/filters/annotation.cpp' || echo '$(srcdir)/'`backend/filters/annotation.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-annotation.Tpo $(DEPDIR)/3Depict-annotation.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/annotation.cpp' object='3Depict-annotation.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-annotation.o: backend/filters/annotation.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-annotation.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-annotation.Tpo -c -o backend/filters/3Depict-annotation.o `test -f 'backend/filters/annotation.cpp' || echo '$(srcdir)/'`backend/filters/annotation.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-annotation.Tpo backend/filters/$(DEPDIR)/3Depict-annotation.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/annotation.cpp' object='backend/filters/3Depict-annotation.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-annotation.o `test -f 'backend/filters/annotation.cpp' || echo '$(srcdir)/'`backend/filters/annotation.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-annotation.o `test -f 'backend/filters/annotation.cpp' || echo '$(srcdir)/'`backend/filters/annotation.cpp
 
-3Depict-annotation.obj: backend/filters/annotation.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-annotation.obj -MD -MP -MF $(DEPDIR)/3Depict-annotation.Tpo -c -o 3Depict-annotation.obj `if test -f 'backend/filters/annotation.cpp'; then $(CYGPATH_W) 'backend/filters/annotation.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/annotation.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-annotation.Tpo $(DEPDIR)/3Depict-annotation.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/annotation.cpp' object='3Depict-annotation.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-annotation.obj: backend/filters/annotation.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-annotation.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-annotation.Tpo -c -o backend/filters/3Depict-annotation.obj `if test -f 'backend/filters/annotation.cpp'; then $(CYGPATH_W) 'backend/filters/annotation.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/annotation.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-annotation.Tpo backend/filters/$(DEPDIR)/3Depict-annotation.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/annotation.cpp' object='backend/filters/3Depict-annotation.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-annotation.obj `if test -f 'backend/filters/annotation.cpp'; then $(CYGPATH_W) 'backend/filters/annotation.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/annotation.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-annotation.obj `if test -f 'backend/filters/annotation.cpp'; then $(CYGPATH_W) 'backend/filters/annotation.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/annotation.cpp'; fi`
 
-3Depict-geometryHelpers.o: backend/filters/geometryHelpers.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-geometryHelpers.o -MD -MP -MF $(DEPDIR)/3Depict-geometryHelpers.Tpo -c -o 3Depict-geometryHelpers.o `test -f 'backend/filters/geometryHelpers.cpp' || echo '$(srcdir)/'`backend/filters/geometryHelpers.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-geometryHelpers.Tpo $(DEPDIR)/3Depict-geometryHelpers.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/geometryHelpers.cpp' object='3Depict-geometryHelpers.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-geometryHelpers.o: backend/filters/geometryHelpers.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-geometryHelpers.o -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Tpo -c -o backend/filters/3Depict-geometryHelpers.o `test -f 'backend/filters/geometryHelpers.cpp' || echo '$(srcdir)/'`backend/filters/geometryHelpers.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Tpo backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/geometryHelpers.cpp' object='backend/filters/3Depict-geometryHelpers.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-geometryHelpers.o `test -f 'backend/filters/geometryHelpers.cpp' || echo '$(srcdir)/'`backend/filters/geometryHelpers.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-geometryHelpers.o `test -f 'backend/filters/geometryHelpers.cpp' || echo '$(srcdir)/'`backend/filters/geometryHelpers.cpp
 
-3Depict-geometryHelpers.obj: backend/filters/geometryHelpers.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-geometryHelpers.obj -MD -MP -MF $(DEPDIR)/3Depict-geometryHelpers.Tpo -c -o 3Depict-geometryHelpers.obj `if test -f 'backend/filters/geometryHelpers.cpp'; then $(CYGPATH_W) 'backend/filters/geometryHelpers.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/geometryHelpers.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-geometryHelpers.Tpo $(DEPDIR)/3Depict-geometryHelpers.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/geometryHelpers.cpp' object='3Depict-geometryHelpers.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/3Depict-geometryHelpers.obj: backend/filters/geometryHelpers.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/3Depict-geometryHelpers.obj -MD -MP -MF backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Tpo -c -o backend/filters/3Depict-geometryHelpers.obj `if test -f 'backend/filters/geometryHelpers.cpp'; then $(CYGPATH_W) 'backend/filters/geometryHelpers.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/geometryHelpers.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Tpo backend/filters/$(DEPDIR)/3Depict-geometryHelpers.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/geometryHelpers.cpp' object='backend/filters/3Depict-geometryHelpers.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-geometryHelpers.obj `if test -f 'backend/filters/geometryHelpers.cpp'; then $(CYGPATH_W) 'backend/filters/geometryHelpers.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/geometryHelpers.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/3Depict-geometryHelpers.obj `if test -f 'backend/filters/geometryHelpers.cpp'; then $(CYGPATH_W) 'backend/filters/geometryHelpers.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/geometryHelpers.cpp'; fi`
 
-3Depict-animator.o: backend/animator.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-animator.o -MD -MP -MF $(DEPDIR)/3Depict-animator.Tpo -c -o 3Depict-animator.o `test -f 'backend/animator.cpp' || echo '$(srcdir)/'`backend/animator.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-animator.Tpo $(DEPDIR)/3Depict-animator.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/animator.cpp' object='3Depict-animator.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-binomial.o: backend/filters/algorithms/binomial.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-binomial.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Tpo -c -o backend/filters/algorithms/3Depict-binomial.o `test -f 'backend/filters/algorithms/binomial.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/binomial.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/binomial.cpp' object='backend/filters/algorithms/3Depict-binomial.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-animator.o `test -f 'backend/animator.cpp' || echo '$(srcdir)/'`backend/animator.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-binomial.o `test -f 'backend/filters/algorithms/binomial.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/binomial.cpp
 
-3Depict-animator.obj: backend/animator.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-animator.obj -MD -MP -MF $(DEPDIR)/3Depict-animator.Tpo -c -o 3Depict-animator.obj `if test -f 'backend/animator.cpp'; then $(CYGPATH_W) 'backend/animator.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/animator.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-animator.Tpo $(DEPDIR)/3Depict-animator.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/animator.cpp' object='3Depict-animator.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-binomial.obj: backend/filters/algorithms/binomial.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-binomial.obj -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Tpo -c -o backend/filters/algorithms/3Depict-binomial.obj `if test -f 'backend/filters/algorithms/binomial.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/binomial.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/binom [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-binomial.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/binomial.cpp' object='backend/filters/algorithms/3Depict-binomial.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-animator.obj `if test -f 'backend/animator.cpp'; then $(CYGPATH_W) 'backend/animator.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/animator.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-binomial.obj `if test -f 'backend/filters/algorithms/binomial.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/binomial.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/binomial.cpp'; fi`
 
-3Depict-filtertreeAnalyse.o: backend/filtertreeAnalyse.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filtertreeAnalyse.o -MD -MP -MF $(DEPDIR)/3Depict-filtertreeAnalyse.Tpo -c -o 3Depict-filtertreeAnalyse.o `test -f 'backend/filtertreeAnalyse.cpp' || echo '$(srcdir)/'`backend/filtertreeAnalyse.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filtertreeAnalyse.Tpo $(DEPDIR)/3Depict-filtertreeAnalyse.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filtertreeAnalyse.cpp' object='3Depict-filtertreeAnalyse.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-animator.o: backend/animator.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-animator.o -MD -MP -MF backend/$(DEPDIR)/3Depict-animator.Tpo -c -o backend/3Depict-animator.o `test -f 'backend/animator.cpp' || echo '$(srcdir)/'`backend/animator.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-animator.Tpo backend/$(DEPDIR)/3Depict-animator.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/animator.cpp' object='backend/3Depict-animator.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filtertreeAnalyse.o `test -f 'backend/filtertreeAnalyse.cpp' || echo '$(srcdir)/'`backend/filtertreeAnalyse.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-animator.o `test -f 'backend/animator.cpp' || echo '$(srcdir)/'`backend/animator.cpp
 
-3Depict-filtertreeAnalyse.obj: backend/filtertreeAnalyse.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filtertreeAnalyse.obj -MD -MP -MF $(DEPDIR)/3Depict-filtertreeAnalyse.Tpo -c -o 3Depict-filtertreeAnalyse.obj `if test -f 'backend/filtertreeAnalyse.cpp'; then $(CYGPATH_W) 'backend/filtertreeAnalyse.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertreeAnalyse.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filtertreeAnalyse.Tpo $(DEPDIR)/3Depict-filtertreeAnalyse.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filtertreeAnalyse.cpp' object='3Depict-filtertreeAnalyse.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-animator.obj: backend/animator.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-animator.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-animator.Tpo -c -o backend/3Depict-animator.obj `if test -f 'backend/animator.cpp'; then $(CYGPATH_W) 'backend/animator.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/animator.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-animator.Tpo backend/$(DEPDIR)/3Depict-animator.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/animator.cpp' object='backend/3Depict-animator.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filtertreeAnalyse.obj `if test -f 'backend/filtertreeAnalyse.cpp'; then $(CYGPATH_W) 'backend/filtertreeAnalyse.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertreeAnalyse.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-animator.obj `if test -f 'backend/animator.cpp'; then $(CYGPATH_W) 'backend/animator.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/animator.cpp'; fi`
 
-3Depict-filtertree.o: backend/filtertree.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filtertree.o -MD -MP -MF $(DEPDIR)/3Depict-filtertree.Tpo -c -o 3Depict-filtertree.o `test -f 'backend/filtertree.cpp' || echo '$(srcdir)/'`backend/filtertree.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filtertree.Tpo $(DEPDIR)/3Depict-filtertree.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filtertree.cpp' object='3Depict-filtertree.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-filtertreeAnalyse.o: backend/filtertreeAnalyse.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-filtertreeAnalyse.o -MD -MP -MF backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Tpo -c -o backend/3Depict-filtertreeAnalyse.o `test -f 'backend/filtertreeAnalyse.cpp' || echo '$(srcdir)/'`backend/filtertreeAnalyse.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Tpo backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filtertreeAnalyse.cpp' object='backend/3Depict-filtertreeAnalyse.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filtertree.o `test -f 'backend/filtertree.cpp' || echo '$(srcdir)/'`backend/filtertree.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filtertreeAnalyse.o `test -f 'backend/filtertreeAnalyse.cpp' || echo '$(srcdir)/'`backend/filtertreeAnalyse.cpp
 
-3Depict-filtertree.obj: backend/filtertree.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filtertree.obj -MD -MP -MF $(DEPDIR)/3Depict-filtertree.Tpo -c -o 3Depict-filtertree.obj `if test -f 'backend/filtertree.cpp'; then $(CYGPATH_W) 'backend/filtertree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertree.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filtertree.Tpo $(DEPDIR)/3Depict-filtertree.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filtertree.cpp' object='3Depict-filtertree.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-filtertreeAnalyse.obj: backend/filtertreeAnalyse.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-filtertreeAnalyse.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Tpo -c -o backend/3Depict-filtertreeAnalyse.obj `if test -f 'backend/filtertreeAnalyse.cpp'; then $(CYGPATH_W) 'backend/filtertreeAnalyse.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertreeAnalyse.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Tpo backend/$(DEPDIR)/3Depict-filtertreeAnalyse.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filtertreeAnalyse.cpp' object='backend/3Depict-filtertreeAnalyse.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filtertree.obj `if test -f 'backend/filtertree.cpp'; then $(CYGPATH_W) 'backend/filtertree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertree.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filtertreeAnalyse.obj `if test -f 'backend/filtertreeAnalyse.cpp'; then $(CYGPATH_W) 'backend/filtertreeAnalyse.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertreeAnalyse.cpp'; fi`
 
-3Depict-ionhit.o: backend/APT/ionhit.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionhit.o -MD -MP -MF $(DEPDIR)/3Depict-ionhit.Tpo -c -o 3Depict-ionhit.o `test -f 'backend/APT/ionhit.cpp' || echo '$(srcdir)/'`backend/APT/ionhit.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionhit.Tpo $(DEPDIR)/3Depict-ionhit.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/APT/ionhit.cpp' object='3Depict-ionhit.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-filtertree.o: backend/filtertree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-filtertree.o -MD -MP -MF backend/$(DEPDIR)/3Depict-filtertree.Tpo -c -o backend/3Depict-filtertree.o `test -f 'backend/filtertree.cpp' || echo '$(srcdir)/'`backend/filtertree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-filtertree.Tpo backend/$(DEPDIR)/3Depict-filtertree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filtertree.cpp' object='backend/3Depict-filtertree.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionhit.o `test -f 'backend/APT/ionhit.cpp' || echo '$(srcdir)/'`backend/APT/ionhit.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filtertree.o `test -f 'backend/filtertree.cpp' || echo '$(srcdir)/'`backend/filtertree.cpp
 
-3Depict-ionhit.obj: backend/APT/ionhit.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-ionhit.obj -MD -MP -MF $(DEPDIR)/3Depict-ionhit.Tpo -c -o 3Depict-ionhit.obj `if test -f 'backend/APT/ionhit.cpp'; then $(CYGPATH_W) 'backend/APT/ionhit.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/ionhit.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-ionhit.Tpo $(DEPDIR)/3Depict-ionhit.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/APT/ionhit.cpp' object='3Depict-ionhit.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-filtertree.obj: backend/filtertree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-filtertree.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-filtertree.Tpo -c -o backend/3Depict-filtertree.obj `if test -f 'backend/filtertree.cpp'; then $(CYGPATH_W) 'backend/filtertree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertree.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-filtertree.Tpo backend/$(DEPDIR)/3Depict-filtertree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filtertree.cpp' object='backend/3Depict-filtertree.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-ionhit.obj `if test -f 'backend/APT/ionhit.cpp'; then $(CYGPATH_W) 'backend/APT/ionhit.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/ionhit.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filtertree.obj `if test -f 'backend/filtertree.cpp'; then $(CYGPATH_W) 'backend/filtertree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filtertree.cpp'; fi`
 
-3Depict-APTFileIO.o: backend/APT/APTFileIO.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-APTFileIO.o -MD -MP -MF $(DEPDIR)/3Depict-APTFileIO.Tpo -c -o 3Depict-APTFileIO.o `test -f 'backend/APT/APTFileIO.cpp' || echo '$(srcdir)/'`backend/APT/APTFileIO.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-APTFileIO.Tpo $(DEPDIR)/3Depict-APTFileIO.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/APT/APTFileIO.cpp' object='3Depict-APTFileIO.o' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-ionhit.o: backend/APT/ionhit.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-ionhit.o -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-ionhit.Tpo -c -o backend/APT/3Depict-ionhit.o `test -f 'backend/APT/ionhit.cpp' || echo '$(srcdir)/'`backend/APT/ionhit.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-ionhit.Tpo backend/APT/$(DEPDIR)/3Depict-ionhit.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/ionhit.cpp' object='backend/APT/3Depict-ionhit.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-APTFileIO.o `test -f 'backend/APT/APTFileIO.cpp' || echo '$(srcdir)/'`backend/APT/APTFileIO.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-ionhit.o `test -f 'backend/APT/ionhit.cpp' || echo '$(srcdir)/'`backend/APT/ionhit.cpp
 
-3Depict-APTFileIO.obj: backend/APT/APTFileIO.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-APTFileIO.obj -MD -MP -MF $(DEPDIR)/3Depict-APTFileIO.Tpo -c -o 3Depict-APTFileIO.obj `if test -f 'backend/APT/APTFileIO.cpp'; then $(CYGPATH_W) 'backend/APT/APTFileIO.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTFileIO.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-APTFileIO.Tpo $(DEPDIR)/3Depict-APTFileIO.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/APT/APTFileIO.cpp' object='3Depict-APTFileIO.obj' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-ionhit.obj: backend/APT/ionhit.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-ionhit.obj -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-ionhit.Tpo -c -o backend/APT/3Depict-ionhit.obj `if test -f 'backend/APT/ionhit.cpp'; then $(CYGPATH_W) 'backend/APT/ionhit.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/ionhit.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-ionhit.Tpo backend/APT/$(DEPDIR)/3Depict-ionhit.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/ionhit.cpp' object='backend/APT/3Depict-ionhit.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-APTFileIO.obj `if test -f 'backend/APT/APTFileIO.cpp'; then $(CYGPATH_W) 'backend/APT/APTFileIO.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTFileIO.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-ionhit.obj `if test -f 'backend/APT/ionhit.cpp'; then $(CYGPATH_W) 'backend/APT/ionhit.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/ionhit.cpp'; fi`
 
-3Depict-APTRanges.o: backend/APT/APTRanges.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-APTRanges.o -MD -MP -MF $(DEPDIR)/3Depict-APTRanges.Tpo -c -o 3Depict-APTRanges.o `test -f 'backend/APT/APTRanges.cpp' || echo '$(srcdir)/'`backend/APT/APTRanges.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-APTRanges.Tpo $(DEPDIR)/3Depict-APTRanges.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/APT/APTRanges.cpp' object='3Depict-APTRanges.o' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-APTFileIO.o: backend/APT/APTFileIO.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-APTFileIO.o -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-APTFileIO.Tpo -c -o backend/APT/3Depict-APTFileIO.o `test -f 'backend/APT/APTFileIO.cpp' || echo '$(srcdir)/'`backend/APT/APTFileIO.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-APTFileIO.Tpo backend/APT/$(DEPDIR)/3Depict-APTFileIO.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/APTFileIO.cpp' object='backend/APT/3Depict-APTFileIO.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-APTRanges.o `test -f 'backend/APT/APTRanges.cpp' || echo '$(srcdir)/'`backend/APT/APTRanges.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-APTFileIO.o `test -f 'backend/APT/APTFileIO.cpp' || echo '$(srcdir)/'`backend/APT/APTFileIO.cpp
 
-3Depict-APTRanges.obj: backend/APT/APTRanges.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-APTRanges.obj -MD -MP -MF $(DEPDIR)/3Depict-APTRanges.Tpo -c -o 3Depict-APTRanges.obj `if test -f 'backend/APT/APTRanges.cpp'; then $(CYGPATH_W) 'backend/APT/APTRanges.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTRanges.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-APTRanges.Tpo $(DEPDIR)/3Depict-APTRanges.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/APT/APTRanges.cpp' object='3Depict-APTRanges.obj' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-APTFileIO.obj: backend/APT/APTFileIO.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-APTFileIO.obj -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-APTFileIO.Tpo -c -o backend/APT/3Depict-APTFileIO.obj `if test -f 'backend/APT/APTFileIO.cpp'; then $(CYGPATH_W) 'backend/APT/APTFileIO.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTFileIO.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-APTFileIO.Tpo backend/APT/$(DEPDIR)/3Depict-APTFileIO.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/APTFileIO.cpp' object='backend/APT/3Depict-APTFileIO.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-APTRanges.obj `if test -f 'backend/APT/APTRanges.cpp'; then $(CYGPATH_W) 'backend/APT/APTRanges.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTRanges.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-APTFileIO.obj `if test -f 'backend/APT/APTFileIO.cpp'; then $(CYGPATH_W) 'backend/APT/APTFileIO.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTFileIO.cpp'; fi`
 
-3Depict-K3DTree.o: backend/filters/K3DTree.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-K3DTree.o -MD -MP -MF $(DEPDIR)/3Depict-K3DTree.Tpo -c -o 3Depict-K3DTree.o `test -f 'backend/filters/K3DTree.cpp' || echo '$(srcdir)/'`backend/filters/K3DTree.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-K3DTree.Tpo $(DEPDIR)/3Depict-K3DTree.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/K3DTree.cpp' object='3Depict-K3DTree.o' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-APTRanges.o: backend/APT/APTRanges.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-APTRanges.o -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-APTRanges.Tpo -c -o backend/APT/3Depict-APTRanges.o `test -f 'backend/APT/APTRanges.cpp' || echo '$(srcdir)/'`backend/APT/APTRanges.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-APTRanges.Tpo backend/APT/$(DEPDIR)/3Depict-APTRanges.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/APTRanges.cpp' object='backend/APT/3Depict-APTRanges.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-K3DTree.o `test -f 'backend/filters/K3DTree.cpp' || echo '$(srcdir)/'`backend/filters/K3DTree.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-APTRanges.o `test -f 'backend/APT/APTRanges.cpp' || echo '$(srcdir)/'`backend/APT/APTRanges.cpp
 
-3Depict-K3DTree.obj: backend/filters/K3DTree.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-K3DTree.obj -MD -MP -MF $(DEPDIR)/3Depict-K3DTree.Tpo -c -o 3Depict-K3DTree.obj `if test -f 'backend/filters/K3DTree.cpp'; then $(CYGPATH_W) 'backend/filters/K3DTree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/K3DTree.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-K3DTree.Tpo $(DEPDIR)/3Depict-K3DTree.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/K3DTree.cpp' object='3Depict-K3DTree.obj' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-APTRanges.obj: backend/APT/APTRanges.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-APTRanges.obj -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-APTRanges.Tpo -c -o backend/APT/3Depict-APTRanges.obj `if test -f 'backend/APT/APTRanges.cpp'; then $(CYGPATH_W) 'backend/APT/APTRanges.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTRanges.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-APTRanges.Tpo backend/APT/$(DEPDIR)/3Depict-APTRanges.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/APTRanges.cpp' object='backend/APT/3Depict-APTRanges.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-K3DTree.obj `if test -f 'backend/filters/K3DTree.cpp'; then $(CYGPATH_W) 'backend/filters/K3DTree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/K3DTree.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-APTRanges.obj `if test -f 'backend/APT/APTRanges.cpp'; then $(CYGPATH_W) 'backend/APT/APTRanges.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/APTRanges.cpp'; fi`
 
-3Depict-K3DTree-mk2.o: backend/filters/K3DTree-mk2.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-K3DTree-mk2.o -MD -MP -MF $(DEPDIR)/3Depict-K3DTree-mk2.Tpo -c -o 3Depict-K3DTree-mk2.o `test -f 'backend/filters/K3DTree-mk2.cpp' || echo '$(srcdir)/'`backend/filters/K3DTree-mk2.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-K3DTree-mk2.Tpo $(DEPDIR)/3Depict-K3DTree-mk2.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/K3DTree-mk2.cpp' object='3Depict-K3DTree-mk2.o' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-abundanceParser.o: backend/APT/abundanceParser.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-abundanceParser.o -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-abundanceParser.Tpo -c -o backend/APT/3Depict-abundanceParser.o `test -f 'backend/APT/abundanceParser.cpp' || echo '$(srcdir)/'`backend/APT/abundanceParser.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-abundanceParser.Tpo backend/APT/$(DEPDIR)/3Depict-abundanceParser.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/abundanceParser.cpp' object='backend/APT/3Depict-abundanceParser.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-K3DTree-mk2.o `test -f 'backend/filters/K3DTree-mk2.cpp' || echo '$(srcdir)/'`backend/filters/K3DTree-mk2.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-abundanceParser.o `test -f 'backend/APT/abundanceParser.cpp' || echo '$(srcdir)/'`backend/APT/abundanceParser.cpp
 
-3Depict-K3DTree-mk2.obj: backend/filters/K3DTree-mk2.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-K3DTree-mk2.obj -MD -MP -MF $(DEPDIR)/3Depict-K3DTree-mk2.Tpo -c -o 3Depict-K3DTree-mk2.obj `if test -f 'backend/filters/K3DTree-mk2.cpp'; then $(CYGPATH_W) 'backend/filters/K3DTree-mk2.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/K3DTree-mk2.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-K3DTree-mk2.Tpo $(DEPDIR)/3Depict-K3DTree-mk2.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/K3DTree-mk2.cpp' object='3Depict-K3DTree-mk2.obj' libtool=no @AMDEPBACKSLASH@
+backend/APT/3Depict-abundanceParser.obj: backend/APT/abundanceParser.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/APT/3Depict-abundanceParser.obj -MD -MP -MF backend/APT/$(DEPDIR)/3Depict-abundanceParser.Tpo -c -o backend/APT/3Depict-abundanceParser.obj `if test -f 'backend/APT/abundanceParser.cpp'; then $(CYGPATH_W) 'backend/APT/abundanceParser.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/abundanceParser.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/APT/$(DEPDIR)/3Depict-abundanceParser.Tpo backend/APT/$(DEPDIR)/3Depict-abundanceParser.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/APT/abundanceParser.cpp' object='backend/APT/3Depict-abundanceParser.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-K3DTree-mk2.obj `if test -f 'backend/filters/K3DTree-mk2.cpp'; then $(CYGPATH_W) 'backend/filters/K3DTree-mk2.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/K3DTree-mk2.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/APT/3Depict-abundanceParser.obj `if test -f 'backend/APT/abundanceParser.cpp'; then $(CYGPATH_W) 'backend/APT/abundanceParser.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/APT/abundanceParser.cpp'; fi`
 
-3Depict-filter.o: backend/filter.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filter.o -MD -MP -MF $(DEPDIR)/3Depict-filter.Tpo -c -o 3Depict-filter.o `test -f 'backend/filter.cpp' || echo '$(srcdir)/'`backend/filter.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filter.Tpo $(DEPDIR)/3Depict-filter.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filter.cpp' object='3Depict-filter.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-K3DTree.o: backend/filters/algorithms/K3DTree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-K3DTree.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Tpo -c -o backend/filters/algorithms/3Depict-K3DTree.o `test -f 'backend/filters/algorithms/K3DTree.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/K3DTree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/K3DTree.cpp' object='backend/filters/algorithms/3Depict-K3DTree.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filter.o `test -f 'backend/filter.cpp' || echo '$(srcdir)/'`backend/filter.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-K3DTree.o `test -f 'backend/filters/algorithms/K3DTree.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/K3DTree.cpp
 
-3Depict-filter.obj: backend/filter.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-filter.obj -MD -MP -MF $(DEPDIR)/3Depict-filter.Tpo -c -o 3Depict-filter.obj `if test -f 'backend/filter.cpp'; then $(CYGPATH_W) 'backend/filter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filter.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-filter.Tpo $(DEPDIR)/3Depict-filter.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filter.cpp' object='3Depict-filter.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-K3DTree.obj: backend/filters/algorithms/K3DTree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-K3DTree.obj -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Tpo -c -o backend/filters/algorithms/3Depict-K3DTree.obj `if test -f 'backend/filters/algorithms/K3DTree.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/K3DTree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/K3DTree.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/K3DTree.cpp' object='backend/filters/algorithms/3Depict-K3DTree.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-filter.obj `if test -f 'backend/filter.cpp'; then $(CYGPATH_W) 'backend/filter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filter.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-K3DTree.obj `if test -f 'backend/filters/algorithms/K3DTree.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/K3DTree.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/K3DTree.cpp'; fi`
 
-3Depict-rdf.o: backend/filters/rdf.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-rdf.o -MD -MP -MF $(DEPDIR)/3Depict-rdf.Tpo -c -o 3Depict-rdf.o `test -f 'backend/filters/rdf.cpp' || echo '$(srcdir)/'`backend/filters/rdf.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-rdf.Tpo $(DEPDIR)/3Depict-rdf.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/rdf.cpp' object='3Depict-rdf.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-K3DTree-mk2.o: backend/filters/algorithms/K3DTree-mk2.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-K3DTree-mk2.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Tpo -c -o backend/filters/algorithms/3Depict-K3DTree-mk2.o `test -f 'backend/filters/algorithms/K3DTree-mk2.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/K3DTree-mk2.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/K3DTree-mk2.cpp' object='backend/filters/algorithms/3Depict-K3DTree-mk2.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-rdf.o `test -f 'backend/filters/rdf.cpp' || echo '$(srcdir)/'`backend/filters/rdf.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-K3DTree-mk2.o `test -f 'backend/filters/algorithms/K3DTree-mk2.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/K3DTree-mk2.cpp
 
-3Depict-rdf.obj: backend/filters/rdf.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-rdf.obj -MD -MP -MF $(DEPDIR)/3Depict-rdf.Tpo -c -o 3Depict-rdf.obj `if test -f 'backend/filters/rdf.cpp'; then $(CYGPATH_W) 'backend/filters/rdf.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/rdf.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-rdf.Tpo $(DEPDIR)/3Depict-rdf.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/filters/rdf.cpp' object='3Depict-rdf.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-K3DTree-mk2.obj: backend/filters/algorithms/K3DTree-mk2.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-K3DTree-mk2.obj -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Tpo -c -o backend/filters/algorithms/3Depict-K3DTree-mk2.obj `if test -f 'backend/filters/algorithms/K3DTree-mk2.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/K3DTree-mk2.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/a [...]
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-K3DTree-mk2.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/K3DTree-mk2.cpp' object='backend/filters/algorithms/3Depict-K3DTree-mk2.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-rdf.obj `if test -f 'backend/filters/rdf.cpp'; then $(CYGPATH_W) 'backend/filters/rdf.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/rdf.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-K3DTree-mk2.obj `if test -f 'backend/filters/algorithms/K3DTree-mk2.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/K3DTree-mk2.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/K3DTree-mk2.cpp'; fi`
 
-3Depict-viscontrol.o: backend/viscontrol.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-viscontrol.o -MD -MP -MF $(DEPDIR)/3Depict-viscontrol.Tpo -c -o 3Depict-viscontrol.o `test -f 'backend/viscontrol.cpp' || echo '$(srcdir)/'`backend/viscontrol.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-viscontrol.Tpo $(DEPDIR)/3Depict-viscontrol.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/viscontrol.cpp' object='3Depict-viscontrol.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-filter.o: backend/filter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-filter.o -MD -MP -MF backend/$(DEPDIR)/3Depict-filter.Tpo -c -o backend/3Depict-filter.o `test -f 'backend/filter.cpp' || echo '$(srcdir)/'`backend/filter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-filter.Tpo backend/$(DEPDIR)/3Depict-filter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filter.cpp' object='backend/3Depict-filter.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-viscontrol.o `test -f 'backend/viscontrol.cpp' || echo '$(srcdir)/'`backend/viscontrol.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filter.o `test -f 'backend/filter.cpp' || echo '$(srcdir)/'`backend/filter.cpp
 
-3Depict-viscontrol.obj: backend/viscontrol.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-viscontrol.obj -MD -MP -MF $(DEPDIR)/3Depict-viscontrol.Tpo -c -o 3Depict-viscontrol.obj `if test -f 'backend/viscontrol.cpp'; then $(CYGPATH_W) 'backend/viscontrol.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/viscontrol.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-viscontrol.Tpo $(DEPDIR)/3Depict-viscontrol.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/viscontrol.cpp' object='3Depict-viscontrol.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-filter.obj: backend/filter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-filter.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-filter.Tpo -c -o backend/3Depict-filter.obj `if test -f 'backend/filter.cpp'; then $(CYGPATH_W) 'backend/filter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filter.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-filter.Tpo backend/$(DEPDIR)/3Depict-filter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filter.cpp' object='backend/3Depict-filter.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-viscontrol.obj `if test -f 'backend/viscontrol.cpp'; then $(CYGPATH_W) 'backend/viscontrol.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/viscontrol.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-filter.obj `if test -f 'backend/filter.cpp'; then $(CYGPATH_W) 'backend/filter.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filter.cpp'; fi`
 
-3Depict-state.o: backend/state.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-state.o -MD -MP -MF $(DEPDIR)/3Depict-state.Tpo -c -o 3Depict-state.o `test -f 'backend/state.cpp' || echo '$(srcdir)/'`backend/state.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-state.Tpo $(DEPDIR)/3Depict-state.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/state.cpp' object='3Depict-state.o' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-rdf.o: backend/filters/algorithms/rdf.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-rdf.o -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo -c -o backend/filters/algorithms/3Depict-rdf.o `test -f 'backend/filters/algorithms/rdf.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/rdf.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/rdf.cpp' object='backend/filters/algorithms/3Depict-rdf.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-state.o `test -f 'backend/state.cpp' || echo '$(srcdir)/'`backend/state.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-rdf.o `test -f 'backend/filters/algorithms/rdf.cpp' || echo '$(srcdir)/'`backend/filters/algorithms/rdf.cpp
 
-3Depict-state.obj: backend/state.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-state.obj -MD -MP -MF $(DEPDIR)/3Depict-state.Tpo -c -o 3Depict-state.obj `if test -f 'backend/state.cpp'; then $(CYGPATH_W) 'backend/state.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/state.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-state.Tpo $(DEPDIR)/3Depict-state.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/state.cpp' object='3Depict-state.obj' libtool=no @AMDEPBACKSLASH@
+backend/filters/algorithms/3Depict-rdf.obj: backend/filters/algorithms/rdf.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/filters/algorithms/3Depict-rdf.obj -MD -MP -MF backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo -c -o backend/filters/algorithms/3Depict-rdf.obj `if test -f 'backend/filters/algorithms/rdf.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/rdf.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/rdf.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Tpo backend/filters/algorithms/$(DEPDIR)/3Depict-rdf.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/filters/algorithms/rdf.cpp' object='backend/filters/algorithms/3Depict-rdf.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-state.obj `if test -f 'backend/state.cpp'; then $(CYGPATH_W) 'backend/state.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/state.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/filters/algorithms/3Depict-rdf.obj `if test -f 'backend/filters/algorithms/rdf.cpp'; then $(CYGPATH_W) 'backend/filters/algorithms/rdf.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/filters/algorithms/rdf.cpp'; fi`
 
-3Depict-plot.o: backend/plot.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-plot.o -MD -MP -MF $(DEPDIR)/3Depict-plot.Tpo -c -o 3Depict-plot.o `test -f 'backend/plot.cpp' || echo '$(srcdir)/'`backend/plot.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-plot.Tpo $(DEPDIR)/3Depict-plot.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/plot.cpp' object='3Depict-plot.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-viscontrol.o: backend/viscontrol.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-viscontrol.o -MD -MP -MF backend/$(DEPDIR)/3Depict-viscontrol.Tpo -c -o backend/3Depict-viscontrol.o `test -f 'backend/viscontrol.cpp' || echo '$(srcdir)/'`backend/viscontrol.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-viscontrol.Tpo backend/$(DEPDIR)/3Depict-viscontrol.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/viscontrol.cpp' object='backend/3Depict-viscontrol.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-plot.o `test -f 'backend/plot.cpp' || echo '$(srcdir)/'`backend/plot.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-viscontrol.o `test -f 'backend/viscontrol.cpp' || echo '$(srcdir)/'`backend/viscontrol.cpp
 
-3Depict-plot.obj: backend/plot.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-plot.obj -MD -MP -MF $(DEPDIR)/3Depict-plot.Tpo -c -o 3Depict-plot.obj `if test -f 'backend/plot.cpp'; then $(CYGPATH_W) 'backend/plot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/plot.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-plot.Tpo $(DEPDIR)/3Depict-plot.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/plot.cpp' object='3Depict-plot.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-viscontrol.obj: backend/viscontrol.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-viscontrol.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-viscontrol.Tpo -c -o backend/3Depict-viscontrol.obj `if test -f 'backend/viscontrol.cpp'; then $(CYGPATH_W) 'backend/viscontrol.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/viscontrol.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-viscontrol.Tpo backend/$(DEPDIR)/3Depict-viscontrol.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/viscontrol.cpp' object='backend/3Depict-viscontrol.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-plot.obj `if test -f 'backend/plot.cpp'; then $(CYGPATH_W) 'backend/plot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/plot.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-viscontrol.obj `if test -f 'backend/viscontrol.cpp'; then $(CYGPATH_W) 'backend/viscontrol.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/viscontrol.cpp'; fi`
 
-3Depict-configFile.o: backend/configFile.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-configFile.o -MD -MP -MF $(DEPDIR)/3Depict-configFile.Tpo -c -o 3Depict-configFile.o `test -f 'backend/configFile.cpp' || echo '$(srcdir)/'`backend/configFile.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-configFile.Tpo $(DEPDIR)/3Depict-configFile.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/configFile.cpp' object='3Depict-configFile.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-state.o: backend/state.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-state.o -MD -MP -MF backend/$(DEPDIR)/3Depict-state.Tpo -c -o backend/3Depict-state.o `test -f 'backend/state.cpp' || echo '$(srcdir)/'`backend/state.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-state.Tpo backend/$(DEPDIR)/3Depict-state.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/state.cpp' object='backend/3Depict-state.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-configFile.o `test -f 'backend/configFile.cpp' || echo '$(srcdir)/'`backend/configFile.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-state.o `test -f 'backend/state.cpp' || echo '$(srcdir)/'`backend/state.cpp
 
-3Depict-configFile.obj: backend/configFile.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-configFile.obj -MD -MP -MF $(DEPDIR)/3Depict-configFile.Tpo -c -o 3Depict-configFile.obj `if test -f 'backend/configFile.cpp'; then $(CYGPATH_W) 'backend/configFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/configFile.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-configFile.Tpo $(DEPDIR)/3Depict-configFile.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='backend/configFile.cpp' object='3Depict-configFile.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-state.obj: backend/state.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-state.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-state.Tpo -c -o backend/3Depict-state.obj `if test -f 'backend/state.cpp'; then $(CYGPATH_W) 'backend/state.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/state.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-state.Tpo backend/$(DEPDIR)/3Depict-state.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/state.cpp' object='backend/3Depict-state.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-configFile.obj `if test -f 'backend/configFile.cpp'; then $(CYGPATH_W) 'backend/configFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/configFile.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-state.obj `if test -f 'backend/state.cpp'; then $(CYGPATH_W) 'backend/state.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/state.cpp'; fi`
 
-3Depict-scene.o: gl/scene.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-scene.o -MD -MP -MF $(DEPDIR)/3Depict-scene.Tpo -c -o 3Depict-scene.o `test -f 'gl/scene.cpp' || echo '$(srcdir)/'`gl/scene.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-scene.Tpo $(DEPDIR)/3Depict-scene.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/scene.cpp' object='3Depict-scene.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-plot.o: backend/plot.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-plot.o -MD -MP -MF backend/$(DEPDIR)/3Depict-plot.Tpo -c -o backend/3Depict-plot.o `test -f 'backend/plot.cpp' || echo '$(srcdir)/'`backend/plot.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-plot.Tpo backend/$(DEPDIR)/3Depict-plot.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/plot.cpp' object='backend/3Depict-plot.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-scene.o `test -f 'gl/scene.cpp' || echo '$(srcdir)/'`gl/scene.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-plot.o `test -f 'backend/plot.cpp' || echo '$(srcdir)/'`backend/plot.cpp
 
-3Depict-scene.obj: gl/scene.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-scene.obj -MD -MP -MF $(DEPDIR)/3Depict-scene.Tpo -c -o 3Depict-scene.obj `if test -f 'gl/scene.cpp'; then $(CYGPATH_W) 'gl/scene.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/scene.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-scene.Tpo $(DEPDIR)/3Depict-scene.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/scene.cpp' object='3Depict-scene.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-plot.obj: backend/plot.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-plot.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-plot.Tpo -c -o backend/3Depict-plot.obj `if test -f 'backend/plot.cpp'; then $(CYGPATH_W) 'backend/plot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/plot.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-plot.Tpo backend/$(DEPDIR)/3Depict-plot.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/plot.cpp' object='backend/3Depict-plot.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-scene.obj `if test -f 'gl/scene.cpp'; then $(CYGPATH_W) 'gl/scene.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/scene.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-plot.obj `if test -f 'backend/plot.cpp'; then $(CYGPATH_W) 'backend/plot.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/plot.cpp'; fi`
 
-3Depict-drawables.o: gl/drawables.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-drawables.o -MD -MP -MF $(DEPDIR)/3Depict-drawables.Tpo -c -o 3Depict-drawables.o `test -f 'gl/drawables.cpp' || echo '$(srcdir)/'`gl/drawables.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-drawables.Tpo $(DEPDIR)/3Depict-drawables.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/drawables.cpp' object='3Depict-drawables.o' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-configFile.o: backend/configFile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-configFile.o -MD -MP -MF backend/$(DEPDIR)/3Depict-configFile.Tpo -c -o backend/3Depict-configFile.o `test -f 'backend/configFile.cpp' || echo '$(srcdir)/'`backend/configFile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-configFile.Tpo backend/$(DEPDIR)/3Depict-configFile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/configFile.cpp' object='backend/3Depict-configFile.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-drawables.o `test -f 'gl/drawables.cpp' || echo '$(srcdir)/'`gl/drawables.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-configFile.o `test -f 'backend/configFile.cpp' || echo '$(srcdir)/'`backend/configFile.cpp
 
-3Depict-drawables.obj: gl/drawables.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-drawables.obj -MD -MP -MF $(DEPDIR)/3Depict-drawables.Tpo -c -o 3Depict-drawables.obj `if test -f 'gl/drawables.cpp'; then $(CYGPATH_W) 'gl/drawables.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/drawables.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-drawables.Tpo $(DEPDIR)/3Depict-drawables.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/drawables.cpp' object='3Depict-drawables.obj' libtool=no @AMDEPBACKSLASH@
+backend/3Depict-configFile.obj: backend/configFile.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT backend/3Depict-configFile.obj -MD -MP -MF backend/$(DEPDIR)/3Depict-configFile.Tpo -c -o backend/3Depict-configFile.obj `if test -f 'backend/configFile.cpp'; then $(CYGPATH_W) 'backend/configFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/configFile.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) backend/$(DEPDIR)/3Depict-configFile.Tpo backend/$(DEPDIR)/3Depict-configFile.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='backend/configFile.cpp' object='backend/3Depict-configFile.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-drawables.obj `if test -f 'gl/drawables.cpp'; then $(CYGPATH_W) 'gl/drawables.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/drawables.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o backend/3Depict-configFile.obj `if test -f 'backend/configFile.cpp'; then $(CYGPATH_W) 'backend/configFile.cpp'; else $(CYGPATH_W) '$(srcdir)/backend/configFile.cpp'; fi`
 
-3Depict-effect.o: gl/effect.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-effect.o -MD -MP -MF $(DEPDIR)/3Depict-effect.Tpo -c -o 3Depict-effect.o `test -f 'gl/effect.cpp' || echo '$(srcdir)/'`gl/effect.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-effect.Tpo $(DEPDIR)/3Depict-effect.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/effect.cpp' object='3Depict-effect.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-scene.o: gl/scene.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-scene.o -MD -MP -MF gl/$(DEPDIR)/3Depict-scene.Tpo -c -o gl/3Depict-scene.o `test -f 'gl/scene.cpp' || echo '$(srcdir)/'`gl/scene.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-scene.Tpo gl/$(DEPDIR)/3Depict-scene.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/scene.cpp' object='gl/3Depict-scene.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-effect.o `test -f 'gl/effect.cpp' || echo '$(srcdir)/'`gl/effect.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-scene.o `test -f 'gl/scene.cpp' || echo '$(srcdir)/'`gl/scene.cpp
 
-3Depict-effect.obj: gl/effect.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-effect.obj -MD -MP -MF $(DEPDIR)/3Depict-effect.Tpo -c -o 3Depict-effect.obj `if test -f 'gl/effect.cpp'; then $(CYGPATH_W) 'gl/effect.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/effect.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-effect.Tpo $(DEPDIR)/3Depict-effect.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/effect.cpp' object='3Depict-effect.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-scene.obj: gl/scene.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-scene.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-scene.Tpo -c -o gl/3Depict-scene.obj `if test -f 'gl/scene.cpp'; then $(CYGPATH_W) 'gl/scene.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/scene.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-scene.Tpo gl/$(DEPDIR)/3Depict-scene.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/scene.cpp' object='gl/3Depict-scene.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-effect.obj `if test -f 'gl/effect.cpp'; then $(CYGPATH_W) 'gl/effect.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/effect.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-scene.obj `if test -f 'gl/scene.cpp'; then $(CYGPATH_W) 'gl/scene.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/scene.cpp'; fi`
 
-3Depict-textures.o: gl/textures.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-textures.o -MD -MP -MF $(DEPDIR)/3Depict-textures.Tpo -c -o 3Depict-textures.o `test -f 'gl/textures.cpp' || echo '$(srcdir)/'`gl/textures.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-textures.Tpo $(DEPDIR)/3Depict-textures.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/textures.cpp' object='3Depict-textures.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-drawables.o: gl/drawables.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-drawables.o -MD -MP -MF gl/$(DEPDIR)/3Depict-drawables.Tpo -c -o gl/3Depict-drawables.o `test -f 'gl/drawables.cpp' || echo '$(srcdir)/'`gl/drawables.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-drawables.Tpo gl/$(DEPDIR)/3Depict-drawables.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/drawables.cpp' object='gl/3Depict-drawables.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-textures.o `test -f 'gl/textures.cpp' || echo '$(srcdir)/'`gl/textures.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-drawables.o `test -f 'gl/drawables.cpp' || echo '$(srcdir)/'`gl/drawables.cpp
 
-3Depict-textures.obj: gl/textures.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-textures.obj -MD -MP -MF $(DEPDIR)/3Depict-textures.Tpo -c -o 3Depict-textures.obj `if test -f 'gl/textures.cpp'; then $(CYGPATH_W) 'gl/textures.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/textures.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-textures.Tpo $(DEPDIR)/3Depict-textures.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/textures.cpp' object='3Depict-textures.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-drawables.obj: gl/drawables.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-drawables.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-drawables.Tpo -c -o gl/3Depict-drawables.obj `if test -f 'gl/drawables.cpp'; then $(CYGPATH_W) 'gl/drawables.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/drawables.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-drawables.Tpo gl/$(DEPDIR)/3Depict-drawables.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/drawables.cpp' object='gl/3Depict-drawables.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-textures.obj `if test -f 'gl/textures.cpp'; then $(CYGPATH_W) 'gl/textures.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/textures.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-drawables.obj `if test -f 'gl/drawables.cpp'; then $(CYGPATH_W) 'gl/drawables.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/drawables.cpp'; fi`
 
-3Depict-select.o: gl/select.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-select.o -MD -MP -MF $(DEPDIR)/3Depict-select.Tpo -c -o 3Depict-select.o `test -f 'gl/select.cpp' || echo '$(srcdir)/'`gl/select.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-select.Tpo $(DEPDIR)/3Depict-select.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/select.cpp' object='3Depict-select.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-effect.o: gl/effect.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-effect.o -MD -MP -MF gl/$(DEPDIR)/3Depict-effect.Tpo -c -o gl/3Depict-effect.o `test -f 'gl/effect.cpp' || echo '$(srcdir)/'`gl/effect.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-effect.Tpo gl/$(DEPDIR)/3Depict-effect.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/effect.cpp' object='gl/3Depict-effect.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-select.o `test -f 'gl/select.cpp' || echo '$(srcdir)/'`gl/select.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-effect.o `test -f 'gl/effect.cpp' || echo '$(srcdir)/'`gl/effect.cpp
 
-3Depict-select.obj: gl/select.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-select.obj -MD -MP -MF $(DEPDIR)/3Depict-select.Tpo -c -o 3Depict-select.obj `if test -f 'gl/select.cpp'; then $(CYGPATH_W) 'gl/select.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/select.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-select.Tpo $(DEPDIR)/3Depict-select.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/select.cpp' object='3Depict-select.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-effect.obj: gl/effect.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-effect.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-effect.Tpo -c -o gl/3Depict-effect.obj `if test -f 'gl/effect.cpp'; then $(CYGPATH_W) 'gl/effect.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/effect.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-effect.Tpo gl/$(DEPDIR)/3Depict-effect.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/effect.cpp' object='gl/3Depict-effect.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-select.obj `if test -f 'gl/select.cpp'; then $(CYGPATH_W) 'gl/select.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/select.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-effect.obj `if test -f 'gl/effect.cpp'; then $(CYGPATH_W) 'gl/effect.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/effect.cpp'; fi`
 
-3Depict-cameras.o: gl/cameras.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-cameras.o -MD -MP -MF $(DEPDIR)/3Depict-cameras.Tpo -c -o 3Depict-cameras.o `test -f 'gl/cameras.cpp' || echo '$(srcdir)/'`gl/cameras.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-cameras.Tpo $(DEPDIR)/3Depict-cameras.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/cameras.cpp' object='3Depict-cameras.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-textures.o: gl/textures.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-textures.o -MD -MP -MF gl/$(DEPDIR)/3Depict-textures.Tpo -c -o gl/3Depict-textures.o `test -f 'gl/textures.cpp' || echo '$(srcdir)/'`gl/textures.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-textures.Tpo gl/$(DEPDIR)/3Depict-textures.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/textures.cpp' object='gl/3Depict-textures.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-cameras.o `test -f 'gl/cameras.cpp' || echo '$(srcdir)/'`gl/cameras.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-textures.o `test -f 'gl/textures.cpp' || echo '$(srcdir)/'`gl/textures.cpp
 
-3Depict-cameras.obj: gl/cameras.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-cameras.obj -MD -MP -MF $(DEPDIR)/3Depict-cameras.Tpo -c -o 3Depict-cameras.obj `if test -f 'gl/cameras.cpp'; then $(CYGPATH_W) 'gl/cameras.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/cameras.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-cameras.Tpo $(DEPDIR)/3Depict-cameras.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/cameras.cpp' object='3Depict-cameras.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-textures.obj: gl/textures.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-textures.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-textures.Tpo -c -o gl/3Depict-textures.obj `if test -f 'gl/textures.cpp'; then $(CYGPATH_W) 'gl/textures.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/textures.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-textures.Tpo gl/$(DEPDIR)/3Depict-textures.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/textures.cpp' object='gl/3Depict-textures.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-cameras.obj `if test -f 'gl/cameras.cpp'; then $(CYGPATH_W) 'gl/cameras.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/cameras.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-textures.obj `if test -f 'gl/textures.cpp'; then $(CYGPATH_W) 'gl/textures.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/textures.cpp'; fi`
 
-3Depict-isoSurface.o: gl/isoSurface.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-isoSurface.o -MD -MP -MF $(DEPDIR)/3Depict-isoSurface.Tpo -c -o 3Depict-isoSurface.o `test -f 'gl/isoSurface.cpp' || echo '$(srcdir)/'`gl/isoSurface.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-isoSurface.Tpo $(DEPDIR)/3Depict-isoSurface.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/isoSurface.cpp' object='3Depict-isoSurface.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-select.o: gl/select.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-select.o -MD -MP -MF gl/$(DEPDIR)/3Depict-select.Tpo -c -o gl/3Depict-select.o `test -f 'gl/select.cpp' || echo '$(srcdir)/'`gl/select.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-select.Tpo gl/$(DEPDIR)/3Depict-select.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/select.cpp' object='gl/3Depict-select.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-isoSurface.o `test -f 'gl/isoSurface.cpp' || echo '$(srcdir)/'`gl/isoSurface.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-select.o `test -f 'gl/select.cpp' || echo '$(srcdir)/'`gl/select.cpp
 
-3Depict-isoSurface.obj: gl/isoSurface.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-isoSurface.obj -MD -MP -MF $(DEPDIR)/3Depict-isoSurface.Tpo -c -o 3Depict-isoSurface.obj `if test -f 'gl/isoSurface.cpp'; then $(CYGPATH_W) 'gl/isoSurface.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/isoSurface.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-isoSurface.Tpo $(DEPDIR)/3Depict-isoSurface.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='gl/isoSurface.cpp' object='3Depict-isoSurface.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-select.obj: gl/select.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-select.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-select.Tpo -c -o gl/3Depict-select.obj `if test -f 'gl/select.cpp'; then $(CYGPATH_W) 'gl/select.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/select.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-select.Tpo gl/$(DEPDIR)/3Depict-select.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/select.cpp' object='gl/3Depict-select.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-isoSurface.obj `if test -f 'gl/isoSurface.cpp'; then $(CYGPATH_W) 'gl/isoSurface.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/isoSurface.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-select.obj `if test -f 'gl/select.cpp'; then $(CYGPATH_W) 'gl/select.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/select.cpp'; fi`
 
-3Depict-stringFuncs.o: common/stringFuncs.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-stringFuncs.o -MD -MP -MF $(DEPDIR)/3Depict-stringFuncs.Tpo -c -o 3Depict-stringFuncs.o `test -f 'common/stringFuncs.cpp' || echo '$(srcdir)/'`common/stringFuncs.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-stringFuncs.Tpo $(DEPDIR)/3Depict-stringFuncs.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/stringFuncs.cpp' object='3Depict-stringFuncs.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-cameras.o: gl/cameras.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-cameras.o -MD -MP -MF gl/$(DEPDIR)/3Depict-cameras.Tpo -c -o gl/3Depict-cameras.o `test -f 'gl/cameras.cpp' || echo '$(srcdir)/'`gl/cameras.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-cameras.Tpo gl/$(DEPDIR)/3Depict-cameras.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/cameras.cpp' object='gl/3Depict-cameras.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-stringFuncs.o `test -f 'common/stringFuncs.cpp' || echo '$(srcdir)/'`common/stringFuncs.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-cameras.o `test -f 'gl/cameras.cpp' || echo '$(srcdir)/'`gl/cameras.cpp
 
-3Depict-stringFuncs.obj: common/stringFuncs.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-stringFuncs.obj -MD -MP -MF $(DEPDIR)/3Depict-stringFuncs.Tpo -c -o 3Depict-stringFuncs.obj `if test -f 'common/stringFuncs.cpp'; then $(CYGPATH_W) 'common/stringFuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/stringFuncs.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-stringFuncs.Tpo $(DEPDIR)/3Depict-stringFuncs.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/stringFuncs.cpp' object='3Depict-stringFuncs.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-cameras.obj: gl/cameras.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-cameras.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-cameras.Tpo -c -o gl/3Depict-cameras.obj `if test -f 'gl/cameras.cpp'; then $(CYGPATH_W) 'gl/cameras.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/cameras.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-cameras.Tpo gl/$(DEPDIR)/3Depict-cameras.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/cameras.cpp' object='gl/3Depict-cameras.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-stringFuncs.obj `if test -f 'common/stringFuncs.cpp'; then $(CYGPATH_W) 'common/stringFuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/stringFuncs.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-cameras.obj `if test -f 'gl/cameras.cpp'; then $(CYGPATH_W) 'gl/cameras.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/cameras.cpp'; fi`
 
-3Depict-xmlHelper.o: common/xmlHelper.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-xmlHelper.o -MD -MP -MF $(DEPDIR)/3Depict-xmlHelper.Tpo -c -o 3Depict-xmlHelper.o `test -f 'common/xmlHelper.cpp' || echo '$(srcdir)/'`common/xmlHelper.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-xmlHelper.Tpo $(DEPDIR)/3Depict-xmlHelper.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/xmlHelper.cpp' object='3Depict-xmlHelper.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-isoSurface.o: gl/isoSurface.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-isoSurface.o -MD -MP -MF gl/$(DEPDIR)/3Depict-isoSurface.Tpo -c -o gl/3Depict-isoSurface.o `test -f 'gl/isoSurface.cpp' || echo '$(srcdir)/'`gl/isoSurface.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-isoSurface.Tpo gl/$(DEPDIR)/3Depict-isoSurface.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/isoSurface.cpp' object='gl/3Depict-isoSurface.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-xmlHelper.o `test -f 'common/xmlHelper.cpp' || echo '$(srcdir)/'`common/xmlHelper.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-isoSurface.o `test -f 'gl/isoSurface.cpp' || echo '$(srcdir)/'`gl/isoSurface.cpp
 
-3Depict-xmlHelper.obj: common/xmlHelper.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-xmlHelper.obj -MD -MP -MF $(DEPDIR)/3Depict-xmlHelper.Tpo -c -o 3Depict-xmlHelper.obj `if test -f 'common/xmlHelper.cpp'; then $(CYGPATH_W) 'common/xmlHelper.cpp'; else $(CYGPATH_W) '$(srcdir)/common/xmlHelper.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-xmlHelper.Tpo $(DEPDIR)/3Depict-xmlHelper.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/xmlHelper.cpp' object='3Depict-xmlHelper.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-isoSurface.obj: gl/isoSurface.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-isoSurface.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-isoSurface.Tpo -c -o gl/3Depict-isoSurface.obj `if test -f 'gl/isoSurface.cpp'; then $(CYGPATH_W) 'gl/isoSurface.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/isoSurface.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-isoSurface.Tpo gl/$(DEPDIR)/3Depict-isoSurface.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/isoSurface.cpp' object='gl/3Depict-isoSurface.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-xmlHelper.obj `if test -f 'common/xmlHelper.cpp'; then $(CYGPATH_W) 'common/xmlHelper.cpp'; else $(CYGPATH_W) '$(srcdir)/common/xmlHelper.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-isoSurface.obj `if test -f 'gl/isoSurface.cpp'; then $(CYGPATH_W) 'gl/isoSurface.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/isoSurface.cpp'; fi`
 
-3Depict-colourmap.o: common/colourmap.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-colourmap.o -MD -MP -MF $(DEPDIR)/3Depict-colourmap.Tpo -c -o 3Depict-colourmap.o `test -f 'common/colourmap.cpp' || echo '$(srcdir)/'`common/colourmap.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-colourmap.Tpo $(DEPDIR)/3Depict-colourmap.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/colourmap.cpp' object='3Depict-colourmap.o' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-tr.o: gl/tr.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-tr.o -MD -MP -MF gl/$(DEPDIR)/3Depict-tr.Tpo -c -o gl/3Depict-tr.o `test -f 'gl/tr.cpp' || echo '$(srcdir)/'`gl/tr.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-tr.Tpo gl/$(DEPDIR)/3Depict-tr.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/tr.cpp' object='gl/3Depict-tr.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-colourmap.o `test -f 'common/colourmap.cpp' || echo '$(srcdir)/'`common/colourmap.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-tr.o `test -f 'gl/tr.cpp' || echo '$(srcdir)/'`gl/tr.cpp
 
-3Depict-colourmap.obj: common/colourmap.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-colourmap.obj -MD -MP -MF $(DEPDIR)/3Depict-colourmap.Tpo -c -o 3Depict-colourmap.obj `if test -f 'common/colourmap.cpp'; then $(CYGPATH_W) 'common/colourmap.cpp'; else $(CYGPATH_W) '$(srcdir)/common/colourmap.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-colourmap.Tpo $(DEPDIR)/3Depict-colourmap.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/colourmap.cpp' object='3Depict-colourmap.obj' libtool=no @AMDEPBACKSLASH@
+gl/3Depict-tr.obj: gl/tr.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT gl/3Depict-tr.obj -MD -MP -MF gl/$(DEPDIR)/3Depict-tr.Tpo -c -o gl/3Depict-tr.obj `if test -f 'gl/tr.cpp'; then $(CYGPATH_W) 'gl/tr.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/tr.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) gl/$(DEPDIR)/3Depict-tr.Tpo gl/$(DEPDIR)/3Depict-tr.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='gl/tr.cpp' object='gl/3Depict-tr.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-colourmap.obj `if test -f 'common/colourmap.cpp'; then $(CYGPATH_W) 'common/colourmap.cpp'; else $(CYGPATH_W) '$(srcdir)/common/colourmap.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o gl/3Depict-tr.obj `if test -f 'gl/tr.cpp'; then $(CYGPATH_W) 'gl/tr.cpp'; else $(CYGPATH_W) '$(srcdir)/gl/tr.cpp'; fi`
 
-3Depict-voxels.o: common/voxels.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-voxels.o -MD -MP -MF $(DEPDIR)/3Depict-voxels.Tpo -c -o 3Depict-voxels.o `test -f 'common/voxels.cpp' || echo '$(srcdir)/'`common/voxels.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-voxels.Tpo $(DEPDIR)/3Depict-voxels.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/voxels.cpp' object='3Depict-voxels.o' libtool=no @AMDEPBACKSLASH@
+common/3Depict-stringFuncs.o: common/stringFuncs.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-stringFuncs.o -MD -MP -MF common/$(DEPDIR)/3Depict-stringFuncs.Tpo -c -o common/3Depict-stringFuncs.o `test -f 'common/stringFuncs.cpp' || echo '$(srcdir)/'`common/stringFuncs.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-stringFuncs.Tpo common/$(DEPDIR)/3Depict-stringFuncs.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/stringFuncs.cpp' object='common/3Depict-stringFuncs.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-voxels.o `test -f 'common/voxels.cpp' || echo '$(srcdir)/'`common/voxels.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-stringFuncs.o `test -f 'common/stringFuncs.cpp' || echo '$(srcdir)/'`common/stringFuncs.cpp
 
-3Depict-voxels.obj: common/voxels.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-voxels.obj -MD -MP -MF $(DEPDIR)/3Depict-voxels.Tpo -c -o 3Depict-voxels.obj `if test -f 'common/voxels.cpp'; then $(CYGPATH_W) 'common/voxels.cpp'; else $(CYGPATH_W) '$(srcdir)/common/voxels.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-voxels.Tpo $(DEPDIR)/3Depict-voxels.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/voxels.cpp' object='3Depict-voxels.obj' libtool=no @AMDEPBACKSLASH@
+common/3Depict-stringFuncs.obj: common/stringFuncs.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-stringFuncs.obj -MD -MP -MF common/$(DEPDIR)/3Depict-stringFuncs.Tpo -c -o common/3Depict-stringFuncs.obj `if test -f 'common/stringFuncs.cpp'; then $(CYGPATH_W) 'common/stringFuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/stringFuncs.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-stringFuncs.Tpo common/$(DEPDIR)/3Depict-stringFuncs.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/stringFuncs.cpp' object='common/3Depict-stringFuncs.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-voxels.obj `if test -f 'common/voxels.cpp'; then $(CYGPATH_W) 'common/voxels.cpp'; else $(CYGPATH_W) '$(srcdir)/common/voxels.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-stringFuncs.obj `if test -f 'common/stringFuncs.cpp'; then $(CYGPATH_W) 'common/stringFuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/stringFuncs.cpp'; fi`
 
-3Depict-mathfuncs.o: common/mathfuncs.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-mathfuncs.o -MD -MP -MF $(DEPDIR)/3Depict-mathfuncs.Tpo -c -o 3Depict-mathfuncs.o `test -f 'common/mathfuncs.cpp' || echo '$(srcdir)/'`common/mathfuncs.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-mathfuncs.Tpo $(DEPDIR)/3Depict-mathfuncs.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/mathfuncs.cpp' object='3Depict-mathfuncs.o' libtool=no @AMDEPBACKSLASH@
+common/3Depict-xmlHelper.o: common/xmlHelper.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-xmlHelper.o -MD -MP -MF common/$(DEPDIR)/3Depict-xmlHelper.Tpo -c -o common/3Depict-xmlHelper.o `test -f 'common/xmlHelper.cpp' || echo '$(srcdir)/'`common/xmlHelper.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-xmlHelper.Tpo common/$(DEPDIR)/3Depict-xmlHelper.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/xmlHelper.cpp' object='common/3Depict-xmlHelper.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-mathfuncs.o `test -f 'common/mathfuncs.cpp' || echo '$(srcdir)/'`common/mathfuncs.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-xmlHelper.o `test -f 'common/xmlHelper.cpp' || echo '$(srcdir)/'`common/xmlHelper.cpp
 
-3Depict-mathfuncs.obj: common/mathfuncs.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-mathfuncs.obj -MD -MP -MF $(DEPDIR)/3Depict-mathfuncs.Tpo -c -o 3Depict-mathfuncs.obj `if test -f 'common/mathfuncs.cpp'; then $(CYGPATH_W) 'common/mathfuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/mathfuncs.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-mathfuncs.Tpo $(DEPDIR)/3Depict-mathfuncs.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/mathfuncs.cpp' object='3Depict-mathfuncs.obj' libtool=no @AMDEPBACKSLASH@
+common/3Depict-xmlHelper.obj: common/xmlHelper.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-xmlHelper.obj -MD -MP -MF common/$(DEPDIR)/3Depict-xmlHelper.Tpo -c -o common/3Depict-xmlHelper.obj `if test -f 'common/xmlHelper.cpp'; then $(CYGPATH_W) 'common/xmlHelper.cpp'; else $(CYGPATH_W) '$(srcdir)/common/xmlHelper.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-xmlHelper.Tpo common/$(DEPDIR)/3Depict-xmlHelper.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/xmlHelper.cpp' object='common/3Depict-xmlHelper.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-mathfuncs.obj `if test -f 'common/mathfuncs.cpp'; then $(CYGPATH_W) 'common/mathfuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/mathfuncs.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-xmlHelper.obj `if test -f 'common/xmlHelper.cpp'; then $(CYGPATH_W) 'common/xmlHelper.cpp'; else $(CYGPATH_W) '$(srcdir)/common/xmlHelper.cpp'; fi`
 
-3Depict-basics.o: common/basics.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-basics.o -MD -MP -MF $(DEPDIR)/3Depict-basics.Tpo -c -o 3Depict-basics.o `test -f 'common/basics.cpp' || echo '$(srcdir)/'`common/basics.cpp
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-basics.Tpo $(DEPDIR)/3Depict-basics.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/basics.cpp' object='3Depict-basics.o' libtool=no @AMDEPBACKSLASH@
+common/3Depict-colourmap.o: common/colourmap.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-colourmap.o -MD -MP -MF common/$(DEPDIR)/3Depict-colourmap.Tpo -c -o common/3Depict-colourmap.o `test -f 'common/colourmap.cpp' || echo '$(srcdir)/'`common/colourmap.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-colourmap.Tpo common/$(DEPDIR)/3Depict-colourmap.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/colourmap.cpp' object='common/3Depict-colourmap.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-basics.o `test -f 'common/basics.cpp' || echo '$(srcdir)/'`common/basics.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-colourmap.o `test -f 'common/colourmap.cpp' || echo '$(srcdir)/'`common/colourmap.cpp
 
-3Depict-basics.obj: common/basics.cpp
- at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT 3Depict-basics.obj -MD -MP -MF $(DEPDIR)/3Depict-basics.Tpo -c -o 3Depict-basics.obj `if test -f 'common/basics.cpp'; then $(CYGPATH_W) 'common/basics.cpp'; else $(CYGPATH_W) '$(srcdir)/common/basics.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/3Depict-basics.Tpo $(DEPDIR)/3Depict-basics.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='common/basics.cpp' object='3Depict-basics.obj' libtool=no @AMDEPBACKSLASH@
+common/3Depict-colourmap.obj: common/colourmap.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-colourmap.obj -MD -MP -MF common/$(DEPDIR)/3Depict-colourmap.Tpo -c -o common/3Depict-colourmap.obj `if test -f 'common/colourmap.cpp'; then $(CYGPATH_W) 'common/colourmap.cpp'; else $(CYGPATH_W) '$(srcdir)/common/colourmap.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-colourmap.Tpo common/$(DEPDIR)/3Depict-colourmap.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/colourmap.cpp' object='common/3Depict-colourmap.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o 3Depict-basics.obj `if test -f 'common/basics.cpp'; then $(CYGPATH_W) 'common/basics.cpp'; else $(CYGPATH_W) '$(srcdir)/common/basics.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-colourmap.obj `if test -f 'common/colourmap.cpp'; then $(CYGPATH_W) 'common/colourmap.cpp'; else $(CYGPATH_W) '$(srcdir)/common/colourmap.cpp'; fi`
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
+common/3Depict-voxels.o: common/voxels.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-voxels.o -MD -MP -MF common/$(DEPDIR)/3Depict-voxels.Tpo -c -o common/3Depict-voxels.o `test -f 'common/voxels.cpp' || echo '$(srcdir)/'`common/voxels.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-voxels.Tpo common/$(DEPDIR)/3Depict-voxels.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/voxels.cpp' object='common/3Depict-voxels.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-voxels.o `test -f 'common/voxels.cpp' || echo '$(srcdir)/'`common/voxels.cpp
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
+common/3Depict-voxels.obj: common/voxels.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-voxels.obj -MD -MP -MF common/$(DEPDIR)/3Depict-voxels.Tpo -c -o common/3Depict-voxels.obj `if test -f 'common/voxels.cpp'; then $(CYGPATH_W) 'common/voxels.cpp'; else $(CYGPATH_W) '$(srcdir)/common/voxels.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-voxels.Tpo common/$(DEPDIR)/3Depict-voxels.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/voxels.cpp' object='common/3Depict-voxels.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-voxels.obj `if test -f 'common/voxels.cpp'; then $(CYGPATH_W) 'common/voxels.cpp'; else $(CYGPATH_W) '$(srcdir)/common/voxels.cpp'; fi`
+
+common/3Depict-mathfuncs.o: common/mathfuncs.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-mathfuncs.o -MD -MP -MF common/$(DEPDIR)/3Depict-mathfuncs.Tpo -c -o common/3Depict-mathfuncs.o `test -f 'common/mathfuncs.cpp' || echo '$(srcdir)/'`common/mathfuncs.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-mathfuncs.Tpo common/$(DEPDIR)/3Depict-mathfuncs.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/mathfuncs.cpp' object='common/3Depict-mathfuncs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-mathfuncs.o `test -f 'common/mathfuncs.cpp' || echo '$(srcdir)/'`common/mathfuncs.cpp
+
+common/3Depict-mathfuncs.obj: common/mathfuncs.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-mathfuncs.obj -MD -MP -MF common/$(DEPDIR)/3Depict-mathfuncs.Tpo -c -o common/3Depict-mathfuncs.obj `if test -f 'common/mathfuncs.cpp'; then $(CYGPATH_W) 'common/mathfuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/mathfuncs.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-mathfuncs.Tpo common/$(DEPDIR)/3Depict-mathfuncs.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/mathfuncs.cpp' object='common/3Depict-mathfuncs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-mathfuncs.obj `if test -f 'common/mathfuncs.cpp'; then $(CYGPATH_W) 'common/mathfuncs.cpp'; else $(CYGPATH_W) '$(srcdir)/common/mathfuncs.cpp'; fi`
+
+common/3Depict-basics.o: common/basics.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-basics.o -MD -MP -MF common/$(DEPDIR)/3Depict-basics.Tpo -c -o common/3Depict-basics.o `test -f 'common/basics.cpp' || echo '$(srcdir)/'`common/basics.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-basics.Tpo common/$(DEPDIR)/3Depict-basics.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/basics.cpp' object='common/3Depict-basics.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-basics.o `test -f 'common/basics.cpp' || echo '$(srcdir)/'`common/basics.cpp
+
+common/3Depict-basics.obj: common/basics.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -MT common/3Depict-basics.obj -MD -MP -MF common/$(DEPDIR)/3Depict-basics.Tpo -c -o common/3Depict-basics.obj `if test -f 'common/basics.cpp'; then $(CYGPATH_W) 'common/basics.cpp'; else $(CYGPATH_W) '$(srcdir)/common/basics.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) common/$(DEPDIR)/3Depict-basics.Tpo common/$(DEPDIR)/3Depict-basics.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='common/basics.cpp' object='common/3Depict-basics.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(3Depict_CXXFLAGS) $(CXXFLAGS) -c -o common/3Depict-basics.obj `if test -f 'common/basics.cpp'; then $(CYGPATH_W) 'common/basics.cpp'; else $(CYGPATH_W) '$(srcdir)/common/basics.cpp'; fi`
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
 	set x; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	$(am__define_uniq_tagged_files); \
 	shift; \
 	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
@@ -1584,15 +1997,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	      $$unique; \
 	  fi; \
 	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
 	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 	     $$unique
@@ -1601,6 +2010,21 @@ GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
 	  && $(am__cd) $(top_srcdir) \
 	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -1668,6 +2092,28 @@ clean-generic:
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f backend/$(DEPDIR)/$(am__dirstamp)
+	-rm -f backend/$(am__dirstamp)
+	-rm -f backend/APT/$(DEPDIR)/$(am__dirstamp)
+	-rm -f backend/APT/$(am__dirstamp)
+	-rm -f backend/filters/$(DEPDIR)/$(am__dirstamp)
+	-rm -f backend/filters/$(am__dirstamp)
+	-rm -f backend/filters/algorithms/$(DEPDIR)/$(am__dirstamp)
+	-rm -f backend/filters/algorithms/$(am__dirstamp)
+	-rm -f common/$(DEPDIR)/$(am__dirstamp)
+	-rm -f common/$(am__dirstamp)
+	-rm -f gl/$(DEPDIR)/$(am__dirstamp)
+	-rm -f gl/$(am__dirstamp)
+	-rm -f gui/$(DEPDIR)/$(am__dirstamp)
+	-rm -f gui/$(am__dirstamp)
+	-rm -f gui/dialogs/$(DEPDIR)/$(am__dirstamp)
+	-rm -f gui/dialogs/$(am__dirstamp)
+	-rm -f gui/dialogs/animateSubDialogs/$(DEPDIR)/$(am__dirstamp)
+	-rm -f gui/dialogs/animateSubDialogs/$(am__dirstamp)
+	-rm -f testing/$(DEPDIR)/$(am__dirstamp)
+	-rm -f testing/$(am__dirstamp)
+	-rm -f wx/$(DEPDIR)/$(am__dirstamp)
+	-rm -f wx/$(am__dirstamp)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -1677,7 +2123,7 @@ clean: clean-am
 clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
 
 distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
+	-rm -rf ./$(DEPDIR) backend/$(DEPDIR) backend/APT/$(DEPDIR) backend/filters/$(DEPDIR) backend/filters/algorithms/$(DEPDIR) common/$(DEPDIR) gl/$(DEPDIR) gui/$(DEPDIR) gui/dialogs/$(DEPDIR) gui/dialogs/animateSubDialogs/$(DEPDIR) testing/$(DEPDIR) wx/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-tags
@@ -1723,7 +2169,7 @@ install-ps-am:
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
+	-rm -rf ./$(DEPDIR) backend/$(DEPDIR) backend/APT/$(DEPDIR) backend/filters/$(DEPDIR) backend/filters/algorithms/$(DEPDIR) common/$(DEPDIR) gl/$(DEPDIR) gui/$(DEPDIR) gui/dialogs/$(DEPDIR) gui/dialogs/animateSubDialogs/$(DEPDIR) testing/$(DEPDIR) wx/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -1743,24 +2189,23 @@ uninstall-am: uninstall-binPROGRAMS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-	clean-generic ctags distclean distclean-compile \
-	distclean-generic distclean-tags distdir dvi dvi-am html \
-	html-am info info-am install install-am install-binPROGRAMS \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
-	install-info install-info-am install-man install-pdf \
-	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
-	uninstall-am uninstall-binPROGRAMS
-
-
-.rc.o:
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-compile distclean-generic distclean-tags \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-binPROGRAMS install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+	ps ps-am tags tags-am uninstall uninstall-am \
+	uninstall-binPROGRAMS
+
+
+%.rc.o: 
 	$(WX_RESCOMP) $^ -o $@
-%.o : %.rc
-	 $(WX_RESCOMP) $^ -o $@
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/backend/APT/APTRanges.cpp b/src/backend/APT/APTRanges.cpp
index 9888584..d744788 100644
--- a/src/backend/APT/APTRanges.cpp
+++ b/src/backend/APT/APTRanges.cpp
@@ -69,7 +69,7 @@ const char *RANGE_EXTS[] = { "rng",
 			  "rrng",
 				""};
 
-bool decomposeIonNames(const std::string &name,
+bool RangeFile::decomposeIonNames(const std::string &name,
 		std::vector<pair<string,size_t> > &fragments)
 {
 	size_t lastMarker=0;
@@ -167,9 +167,55 @@ bool decomposeIonNames(const std::string &name,
 		fragments.push_back(make_pair(s,multiplicity));
 	}
 
+
+	//Spin through dataset and collect the non-unique fragment
+	vector<bool> toKill(fragments.size(),false);
+	for(size_t ui=0;ui<fragments.size();ui++)
+	{
+		//skip empty framgnets
+		if(fragments[ui].first.empty())
+			ui++;
+
+		for(size_t uj=ui+1;uj<fragments.size();uj++)
+		{
+			//skip empty gragments
+			if(fragments[uj].first.empty())
+				uj++;
+
+			//Collect fragment multiplcities if they have the same name
+			if(fragments[uj].first == fragments[ui].first)
+			{
+				fragments[ui].second+=fragments[uj].second;
+				fragments[uj].first=""; //Zero out name so we don't hit it
+
+				toKill[uj]=true;
+
+			}
+		}
+	}
+
+	vectorMultiErase(fragments,toKill);
+	
 	return true;
 }
 
+
+//ENV files sometimes have charge state information in the ion
+// names, use this function as a helper to strip it out
+std::string RangeFile::envDropChargeState(const std::string &strName)
+{
+	std::string res=strName;
+	if(strName[strName.size()-1] == '+')
+	{
+		size_t chargeStateOffset;
+		chargeStateOffset=strName.find_last_of("_");
+		if(chargeStateOffset != std::string::npos)
+			res=strName.substr(0,chargeStateOffset);
+	}
+
+	return res;
+}
+
 //Given the name-frequency pairing vector, see if there
 // is a match in the map of composed names
 bool matchComposedName(const std::map<string,size_t> &composedNames,
@@ -187,7 +233,7 @@ bool matchComposedName(const std::map<string,size_t> &composedNames,
 			it!=composedNames.end();++it)
 	{
 		vector<pair<string,size_t> > frags;
-		if(!decomposeIonNames(it->first,frags))
+		if(!RangeFile::decomposeIonNames(it->first,frags))
 			frags.clear();
 
 			
@@ -273,11 +319,30 @@ bool matchComposedName(const std::map<string,size_t> &composedNames,
 	return (matchOffset !=(size_t) - 1);
 }
 
-RangeFile::RangeFile() : errState(0)
+RangeFile::RangeFile() : enforceConsistency(true), errState(0)
 {
 	COMPILE_ASSERT(THREEDEP_ARRAYSIZE(RANGE_EXTS)==RANGE_FORMAT_END_OF_ENUM+1);
 }
 
+const RangeFile &RangeFile::operator=(const RangeFile &oth)
+{
+	ionNames.clear();
+	colours.clear();
+	ranges.clear();
+	ionIDs.clear();
+
+		
+	ionNames=oth.ionNames;
+	colours=oth.colours;
+	ranges=oth.ranges;
+	ionIDs=oth.ionIDs;
+	enforceConsistency=oth.enforceConsistency;
+	errState=oth.errState;
+	warnMessages=oth.warnMessages;
+
+	return *this;
+}
+
 unsigned int RangeFile::write(std::ostream &f, size_t format) const
 {
 
@@ -499,36 +564,38 @@ bool RangeFile::openGuessFormat(const char *rangeFilename)
 	//Try to auto-detect the filetype
 	assumedFileFormat=detectFileType(rangeFilename);
 
+	if(assumedFileFormat < RANGE_FORMAT_END_OF_ENUM)
+	{
+		if(!open(rangeFilename,assumedFileFormat))
+			return true;
+	}
 	//Use the guessed format
-	if(open(rangeFilename,assumedFileFormat))
+	unsigned int errStateRestore;
+	errStateRestore=errState;
+	//If that failed, go to plan B-- Brute force.
+	//try all readers
+	bool openOK=false;
+
+	for(unsigned int ui=0;ui<RANGE_FORMAT_END_OF_ENUM; ui++)
 	{
-		unsigned int errStateRestore;
-		errStateRestore=errState;
-		//If that failed, go to plan B-- Brute force.
-		//try all readers
-		bool openOK=false;
+		if(ui == assumedFileFormat)
+			continue;
 
-		for(unsigned int ui=0;ui<RANGE_FORMAT_END_OF_ENUM; ui++)
+		if(!open(rangeFilename,ui))
 		{
-			if(ui == assumedFileFormat)
-				continue;
-
-			if(!open(rangeFilename,ui))
-			{
-				assumedFileFormat=ui;
-				openOK=true;
-				break;
-			}
-		}
-	
-		if(!openOK)
-		{
-			//Restore the error state for the assumed file format
-			errState=errStateRestore;
-			return false;
+			assumedFileFormat=ui;
+			openOK=true;
+			break;
 		}
 	}
 
+	if(!openOK)
+	{
+		//Restore the error state for the assumed file format
+		errState=errStateRestore;
+		return false;
+	}
+
 	return true;
 }
 
@@ -931,6 +998,12 @@ unsigned int RangeFile::detectFileType(const char *rangeFile)
 		STATUS_IS_MAYBE,
 	};
 
+#if !defined(__WIN32__) && !defined(__WIN64)
+	//Under posix platforms (linux) directories can be opened by fopen. disallow
+	if(isNotDirectory(rangeFile) == false)
+		return RANGE_FORMAT_END_OF_ENUM;
+#endif
+
 	//create a fail-on-unimplemnted type detection scheme
 	vector<unsigned int > typeStatus(RANGE_FORMAT_END_OF_ENUM,STATUS_NOT_CHECKED);
 
@@ -1043,10 +1116,10 @@ skipoutRNGChecks:
 		if(!f)
 			return RANGE_FORMAT_END_OF_ENUM;
 
-		//Check for existance of lines that match format section
+		//Check for existence of lines that match format section
 		std::vector<string> sections;
-		sections.push_back("[Ions]");
-		sections.push_back("[Ranges]");
+		sections.push_back("[ions]");
+		sections.push_back("[ranges]");
 
 		vector<bool> haveSection(sections.size(),false);
 	
@@ -1056,7 +1129,7 @@ skipoutRNGChecks:
 		while(!f.eof())
 		{
 
-			//Get line, stripped of whitspace
+			//Get line, stripped of whitespace
 			std::string tmpStr;
 			getline(f,tmpStr);
 			tmpStr=stripWhite(tmpStr);
@@ -1064,7 +1137,7 @@ skipoutRNGChecks:
 			//See if we have this header
 			for(size_t ui=0;ui<sections.size();ui++)
 			{
-				if(sections[ui] == tmpStr)
+				if(sections[ui] == lowercase(tmpStr))
 				{
 					haveSection[ui]=true;
 
@@ -1120,7 +1193,7 @@ skipoutRNGChecks:
 	//--
 
 	//Check there is only one STATUS_IS_MAYBE or STATUS_NOT_CHECKED
-	if(std::count(typeStatus.begin(),typeStatus.end(),(unsigned int)STATUS_IS_NOT) == typeStatus.size()-1)
+	if((size_t)std::count(typeStatus.begin(),typeStatus.end(),(unsigned int)STATUS_IS_NOT) == typeStatus.size()-1)
 	{
 		//OK, there can only be one.  Return the format that has not
 		//  been rejected
@@ -1130,7 +1203,7 @@ skipoutRNGChecks:
 				return ui;
 
 		}
-		//in this case, we only have  NOT_CHECKED remaning. So, we hvae no idea
+		//in this case, we only have  NOT_CHECKED remaining. So, we have no idea
 		return RANGE_FORMAT_END_OF_ENUM;
 
 	}
@@ -1364,7 +1437,7 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 	
 	//Ruoen group "environment file" format
 	//This is not a standard file format, so the
-	//reader is a best-effort implementation, based upon example
+	//reader is a best-effort implementation, based upon examples
 	char *inBuffer = new char[MAX_LINE_SIZE];
 	unsigned int numRanges;
 	unsigned int numIons;	
@@ -1396,11 +1469,28 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 
 		//Try different delimiters to split string
 		splitStrsRef(s.c_str(),"\t ",strVec);
-	
+
 		stripZeroEntries(strVec);
+		
+		//Drop any entry data including and after ';'.
+		// Revision 0.3 files show this ;, but it is not clear what
+		// it is supposed to be for. Sample files I have show only zeros in these positions
+		for(size_t ui=0;ui<strVec.size();ui++)
+		{
+			size_t offset;
+			offset=strVec[ui].find(';');
+			if(offset == std::string::npos)
+				continue;
+
+			strVec[ui]=strVec[ui].substr(0,offset);
+		}
 
+
+		stripZeroEntries(strVec);
+		
 		if(strVec.empty())
 			continue;
+		
 
 		if(!haveNumRanges)
 		{
@@ -1441,6 +1531,9 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 						return RANGE_ERR_FORMAT;
 					}
 
+					//Strip the charge state, if it exists
+					strVec[0]=envDropChargeState(strVec[0]);
+
 					//Check that name consists only of 
 					//readable ascii chars, or period
 					for(unsigned int ui=0; ui<strVec[0].size(); ui++)
@@ -1453,7 +1546,26 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 							return RANGE_ERR_FORMAT;
 						}
 					}
-					//Env file contains only the long name, so use that for both the short and long names
+
+					//Env file contains only the
+					// long name, so use that for both
+					// the short and long names
+					bool nameExists=false;
+					for(size_t ui=0;ui<ionNames.size();ui++)
+					{
+						if (ionNames[ui].first == strVec[0])
+						{
+							nameExists=true;
+							break;
+						}
+					}
+
+					//ion name already exists (eg as another charge state). nothing to do.
+					// Note that env files can have two colours for same ion at different states
+					// but we don't support this
+					if(nameExists)
+						continue;
+
 					ionNames.push_back(std::make_pair(strVec[0],strVec[0]));
 					//Use the colours (positions 1-3)
 					RGBf colourStruct;
@@ -1495,6 +1607,7 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 				{
 					unsigned int thisIonID;
 					thisIonID=(unsigned int)-1;
+					strVec[0] = envDropChargeState(strVec[0]);
 					for(unsigned int ui=0;ui<ionNames.size();ui++)
 					{
 						if(strVec[0] == ionNames[ui].first)
@@ -1523,6 +1636,13 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 						return RANGE_ERR_FORMAT;
 					}
 
+					//Disallow reversed ranges
+					if(rangeStart > rangeEnd)
+					{
+						delete[] inBuffer;
+						return RANGE_ERR_FORMAT;
+					}
+
 					ranges.push_back(std::make_pair(rangeStart,rangeEnd));
 
 					ionIDs.push_back(thisIonID);
@@ -1537,15 +1657,17 @@ unsigned int RangeFile::openENV(FILE *fpRange)
 		
 	}	
 
+	delete[] inBuffer;
+	//Note that the in-file reported number of ions might actually be too bug
+	//as we "fold" some ions together (eg Si_+ and Si_2+ for us are both considered Si)
+	if(ionNames.size() > numIons || ranges.size() > numRanges)
+		return RANGE_ERR_FORMAT;
+
 	//There should be more data following the range information.
 	// if not, this is not really an env file
 	if(feof(fpRange))
-	{
-		delete[] inBuffer;
 		return RANGE_ERR_FORMAT;
-	}	
 
-	delete[] inBuffer;
 
 	return 0;
 }
@@ -1588,12 +1710,12 @@ unsigned int RangeFile::openRRNG(FILE *fpRange)
 		if (!s.size())
 			continue;
 
-		if (s == "[Ions]")
+		if (lowercase(s) == "[ions]")
 		{
 			curBlock=BLOCK_IONS;
 			continue;
 		}
-		else if (s == "[Ranges]")
+		else if (lowercase(s) == "[ranges]")
 		{
 			curBlock=BLOCK_RANGES;
 			continue;
@@ -1747,37 +1869,26 @@ unsigned int RangeFile::openRRNG(FILE *fpRange)
 					//of range start and end
 					//Range1=31.8372 32.2963 Vol:0.01521 Zn:1 Color:999999
 					//	 	^rngmid ^rngend
-					size_t rngMidIdx,rngEndIdx;
 					string rngStart,rngEnd;
-					split[1]=stripWhite(split[1]);
-					rngMidIdx = split[1].find_first_of(' ');
-
-					if (rngMidIdx == std::string::npos)
-					{
-						delete[] inBuffer;
-						return RANGE_ERR_FORMAT;
-					}
+					string strTmp=stripWhite(split[1]);
 
-					rngEndIdx=split[1].find_first_of(' ',rngMidIdx+1);
-					if (rngEndIdx == std::string::npos)
-					{
-						delete[] inBuffer;
+					//Split the remaining field into key:value pairs, with whitespace delimiters
+					split.clear();
+					splitStrsRef(strTmp.c_str(),"\t ",split);
+					stripZeroEntries(split);
+					//Need a minimum of 4 entries here
+					if(split.size() < 4)
 						return RANGE_ERR_FORMAT;
-					}
-
-					rngStart = split[1].substr(0,rngMidIdx);
-					rngEnd = split[1].substr(rngMidIdx+1,rngEndIdx-(rngMidIdx+1));
-
-
-					//Strip the range
-					string strTmp;
-					strTmp = split[1].substr(rngEndIdx+1);//,split[1].size()-(rngEndIdx+1));
+					
+					//First two contains the range data
+					rngStart=split[0];
+					rngEnd=split[1];
 
-					//Split the remaining field into key:value pairs
-					split.clear();
-					splitStrsRef(strTmp.c_str(),' ',split);
+					//Remove the two leading elements, the rest are : separated
+					split.erase(split.begin());
+					split.erase(split.begin());
 
-					stripZeroEntries(split);
+					//Retrieve the  remaining fields
 					RGBf col;
 					bool haveColour,haveNameField;
 					haveColour=false;
@@ -2073,11 +2184,8 @@ bool RangeFile::isSelfConsistent() const
 			return false;
 	
 		//Check that ranges don't overlap.
-		for(unsigned int uj=0; uj<ranges.size();uj++)
+		for(unsigned int uj=ui+1; uj<ranges.size();uj++)
 		{
-			if(ui==uj)
-				continue;
-
 			//check that not sitting inside a range
 			if(ranges[ui].first > ranges[uj].first &&
 					ranges[ui].first < ranges[uj].second )
@@ -2099,6 +2207,36 @@ bool RangeFile::isSelfConsistent() const
 		}
 	}
 
+	
+	//Ensure that the names don't clash
+	for(size_t ui=0;ui<ionNames.size();ui++)
+	{
+		for(size_t uj=ui+1;uj<ionNames.size();uj++)
+		{
+			if(ionNames[ui].first == ionNames[uj].first ||
+				ionNames[ui].second == ionNames[uj].second)
+				return false;
+		}
+	}
+
+
+	//Ensure that names conform to allowed naming scheme
+	for(size_t ui=0;ui<ionNames.size();ui++)
+	{
+		string tmp;
+		tmp=ionNames[ui].first;
+
+		const char *DISALLOWED_ION_NAMES=" \t\r\n";
+		//TODO : Use whitelist, rather than blacklist
+		if(tmp.find_first_of(DISALLOWED_ION_NAMES)!= string::npos)
+			return false;
+
+		tmp=ionNames[ui].second;
+		if(tmp.find_first_of(DISALLOWED_ION_NAMES)!= string::npos) 
+			return false;
+	}
+
+
 	return true;
 }
 
@@ -2258,6 +2396,11 @@ pair<float,float> RangeFile::getRange(unsigned int ui) const
 	return ranges[ui];
 }
 
+pair<float,float> &RangeFile::getRangeByRef(unsigned int ui) 
+{
+	return ranges[ui];
+}
+
 RGBf RangeFile::getColour(unsigned int ui) const
 {
 	ASSERT(ui <  colours.size());
@@ -2299,14 +2442,27 @@ unsigned int RangeFile::getIonID(unsigned int range) const
 	return ionIDs[range];
 }
 
-unsigned int RangeFile::getIonID(const char *name) const
+unsigned int RangeFile::getIonID(const char *name, bool useShortName) const
 {
-	for(unsigned int ui=0; ui<ionNames.size(); ui++)
+	if(useShortName)
 	{
-		if(ionNames[ui].first == name)
-			return ui;
+		//find the first element in the sequence
+		for(unsigned int ui=0; ui<ionNames.size(); ui++)
+		{
+			if(ionNames[ui].first == name)
+				return ui;
+		}
 	}
+	else
+	{
+		//Find using the second element in the sequence (longName)
+		for(unsigned int ui=0; ui<ionNames.size(); ui++)
+		{
+			if(ionNames[ui].second == name)
+				return ui;
+		}
 
+	}
 	return (unsigned int)-1;	
 }
 
@@ -2394,6 +2550,46 @@ void RangeFile::setIonLongName(unsigned int id, const std::string &newName)
 	ionNames[id].second = newName;
 }
 
+bool RangeFile::setRangeStart(unsigned int rangeId, float v)
+{
+	ASSERT(!enforceConsistency || isSelfConsistent());
+	
+	float &f=ranges[rangeId].first;
+	float tmp;
+	tmp=f;
+	f=v;
+	
+	//TODO: I think this does excess calculatioN?
+	if(enforceConsistency && !isSelfConsistent())
+	{
+		//restore original value
+		f=tmp;
+		return false;
+	}
+
+	return true;
+}
+
+bool RangeFile::setRangeEnd(unsigned int rangeId, float v)
+{
+
+	ASSERT(!enforceConsistency || isSelfConsistent());
+
+	float &f=ranges[rangeId].second;
+	float tmp;
+	tmp=f;
+	f=v;
+	
+	//TODO: I think this does excess calculatioN?
+	if(enforceConsistency && !isSelfConsistent())
+	{
+		//restore original value
+		f=tmp;
+		return false;
+	}
+
+	return true;
+}
 void  RangeFile::swap(RangeFile &r)
 {
 	using std::swap;
@@ -2406,57 +2602,60 @@ void  RangeFile::swap(RangeFile &r)
 
 }
 
-bool RangeFile::moveRange(unsigned int rangeId, bool limit, float newMass)
+bool RangeFile::moveRange(unsigned int rangeId, bool upperLimit, float newMass)
 {
-
-	//Check for moving past other part of range -- "inversion"
-	if(limit)
-	{
-		//Move upper range
-		if(newMass <= ranges[rangeId].first)
-			return false;
-	}
-	else
-	{
-		if(newMass >= ranges[rangeId].second)
-			return false;
-	}
-
-	//Check that moving this range will not cause any overlaps with 
-	//other ranges
-	for(unsigned int ui=0; ui<ranges.size(); ui++)
+	if(enforceConsistency)
 	{
-		if( ui == rangeId)
-			continue;
-
-		if(limit)
+		//Check for moving past other part of range -- "inversion"
+		if(upperLimit)
 		{
-			//moving high range
-			//check for overlap on first
-			if((ranges[rangeId].first < ranges[ui].first &&
-					newMass > ranges[ui].first))
-			       return false;
-			
-			if((ranges[rangeId].first < ranges[ui].second &&
-					newMass > ranges[ui].second))
-			       return false;
+			//Move upper range
+			if(newMass <= ranges[rangeId].first)
+				return false;
 		}
 		else
 		{
-			//moving low range
-			//check for overlap on first
-			if((ranges[rangeId].second > ranges[ui].first &&
-					newMass < ranges[ui].first))
-			       return false;
-			
-			if((ranges[rangeId].second > ranges[ui].second &&
-					newMass < ranges[ui].second))
-			       return false;
+			if(newMass >= ranges[rangeId].second)
+				return false;
 		}
 
-	}
+		//Check that moving this range will not cause any overlaps with 
+		//other ranges
+		for(unsigned int ui=0; ui<ranges.size(); ui++)
+		{
+			if( ui == rangeId)
+				continue;
 
-	if(limit)
+			if(upperLimit)
+			{
+				//moving high range
+				//check for overlap on first
+				if((ranges[rangeId].first < ranges[ui].first &&
+						newMass > ranges[ui].first))
+				       return false;
+				
+				if((ranges[rangeId].first < ranges[ui].second &&
+						newMass > ranges[ui].second))
+				       return false;
+			}
+			else
+			{
+				//moving low range
+				//check for overlap on first
+				if((ranges[rangeId].second > ranges[ui].first &&
+						newMass < ranges[ui].first))
+				       return false;
+				
+				if((ranges[rangeId].second > ranges[ui].second &&
+						newMass < ranges[ui].second))
+				       return false;
+			}
+
+		}
+
+	}
+	
+	if(upperLimit)
 		ranges[rangeId].second = newMass;
 	else
 		ranges[rangeId].first= newMass;
@@ -2502,35 +2701,42 @@ bool RangeFile::moveBothRanges(unsigned int rangeId, float newLow, float newHigh
 
 
 
-unsigned int RangeFile::addRange(float start, float end, unsigned int parentIonID)
+unsigned int RangeFile::addRange(float start, float end, unsigned int parentIonID) 
 {
 	ASSERT(start < end);
-	//Ensure that they do NOT overlap
-	for(unsigned int ui=0;ui<ranges.size();ui++)
+	if(enforceConsistency)
 	{
-		//Check for start end inside other range
-		if(start > ranges[ui].first && 
-				start<=ranges[ui].second)
-			return -1;
-
-		if(end > ranges[ui].first && 
-				end<=ranges[ui].second)
-			return -1;
-
-		//check for start/end spanning range entirely
-		if(start < ranges[ui].first && end > ranges[ui].second)
-			return -1;
+		//Ensure that they do NOT overlap
+		for(unsigned int ui=0;ui<ranges.size();ui++)
+		{
+			//Check for start end inside other range
+			if(start > ranges[ui].first && 
+					start<=ranges[ui].second)
+				return -1;
+
+			if(end > ranges[ui].first && 
+					end<=ranges[ui].second)
+				return -1;
+
+			//check for start/end spanning range entirely
+			if(start < ranges[ui].first && end > ranges[ui].second)
+				return -1;
+		}
 	}
-
 	//Got this far? Good - valid range. Insert it and move on
 	ionIDs.push_back(parentIonID);
 	ranges.push_back(std::make_pair(start,end));
 
-	ASSERT(isSelfConsistent());
+#ifdef DEBUG
+	if(enforceConsistency)
+	{
+		ASSERT(isSelfConsistent());
+	}
+#endif
 	return ranges.size();
 }
 
-unsigned int RangeFile::addIon(std::string &shortN, std::string &longN, RGBf &newCol)
+unsigned int RangeFile::addIon(const std::string &shortN, const std::string &longN, const RGBf &newCol)
 {
 	for(unsigned int ui=9; ui<ionNames.size() ;ui++)
 	{
@@ -2544,9 +2750,54 @@ unsigned int RangeFile::addIon(std::string &shortN, std::string &longN, RGBf &ne
 	ASSERT(isSelfConsistent());
 	return ionNames.size()-1;
 }
+
 void RangeFile::setIonID(unsigned int range, unsigned int newIonId)
 {
 	ASSERT(newIonId < ionIDs.size());
 	ionIDs[range] = newIonId;
 }
 
+void RangeFile::eraseRange(size_t rangeId)
+{
+	ASSERT(rangeId < ranges.size());
+	std::swap(ranges.back(),ranges[rangeId]);
+	ranges.pop_back();	
+	
+	std::swap(ionIDs.back(),ionIDs[rangeId]);
+	ionIDs.pop_back();	
+}
+
+void RangeFile::eraseIon(size_t ionId)
+{
+	
+	//Kill any ranges that belong to this ion
+	vector<bool> killRange(ranges.size(),false);
+	for(size_t ui=0;ui<ionIDs.size(); ui++)
+	{
+		if(ionIDs[ui]  == ionId)
+			killRange[ui]=true;
+	}
+
+	//Remove the desired range and ionID mappings.
+	vectorMultiErase(ranges,killRange);
+	vectorMultiErase(ionIDs,killRange);
+
+	//Remove the ion name and colour for the selected ion
+	ionNames.erase(ionNames.begin()+ionId);
+	colours.erase(colours.begin()+ionId);
+
+	//Now, we have to renumber the existing ionIDs, which have shifted down a peg
+	for(size_t ui=0;ui<ionIDs.size();ui++)
+	{
+		//We should have deleted this ionsID
+		ASSERT(ionIDs[ui] != ionId);
+		//Shift any ionIDs that are higher down one peg
+		if(ionIDs[ui]  >ionId)
+			ionIDs[ui]--;
+#ifdef DEBUG
+		ASSERT(ionIDs[ui] < ionNames.size());
+#endif
+	}
+
+
+}
diff --git a/src/backend/APT/APTRanges.h b/src/backend/APT/APTRanges.h
index 8309665..35b8946 100644
--- a/src/backend/APT/APTRanges.h
+++ b/src/backend/APT/APTRanges.h
@@ -83,7 +83,10 @@ class RangeFile
 		//The ion ID number for each range 
 		//FIXME: Convert to proper uniqueID system
 		std::vector<size_t> ionIDs;
-	
+
+		//Should we enforce range consistency?
+		bool enforceConsistency;
+
 		unsigned int errState;
 		//Warning messages, used when loading rangefiles
 		std::vector<std::string> warnMessages;
@@ -92,8 +95,6 @@ class RangeFile
 		//!Erase the contents of the rangefile
 		void clear();
 
-		//!Performs limited checks for self consistency.
-		bool isSelfConsistent() const;
 
 		//!Load an ORNL formatted "RNG" rangefile
 		// caller must supply and release file pointer
@@ -124,8 +125,13 @@ class RangeFile
 		// caller must supply and release file pointer
 		unsigned int openENV(FILE *fp);
 
+		//Strip charge state from ENV ion names
+		static std::string envDropChargeState(const std::string &strName);
+
 	public:
 		RangeFile();
+
+		const RangeFile& operator=(const RangeFile &other);
 		//!Open a specified range file
 		unsigned int open(const char *rangeFile, unsigned int format=RANGE_FORMAT_ORNL);	
 		//!Open a specified range file - returns true on success
@@ -140,10 +146,18 @@ class RangeFile
 		// returns enum value on success, or RANGE_FORMAT_END_OF_ENUM on failure
 		static unsigned int detectFileType(const char *file);
 
+		void setEnforceConsistent(bool shouldEnforce=true) { enforceConsistency=shouldEnforce;}
+
+		//!Performs checks for self consistency.
+		bool isSelfConsistent() const;
+		
 		//!Print the translated error associated with the current range file state
 		void printErr(std::ostream &strm) const;
 		//!Retrieve the translated error associated with the current range file state
 		std::string getErrString() const;
+
+		
+
 		//!Get the number of unique ranges
 		unsigned int getNumRanges() const;
 		//!Get the number of ranges for a given ion ID
@@ -152,6 +166,9 @@ class RangeFile
 		unsigned int getNumIons() const;
 		//!Retrieve the start and end of a given range as a pair(start,end)
 		std::pair<float,float> getRange(unsigned int ) const;
+
+		//!Retrieve the start and end of a given range as a pair(start,end)
+		std::pair<float,float> &getRangeByRef(unsigned int );
 		//!Retrieve a given colour from the ion ID
 		RGBf getColour(unsigned int) const;
 		//!Set the colour using the ion ID
@@ -169,8 +186,10 @@ class RangeFile
 		/*!No validation checks are performed outside debug mode. Ion
 		 range *must* exist*/
 		unsigned int getIonID(unsigned int range) const;
-		//!Get the ion ID from its short name
-		unsigned int getIonID(const char *name) const;	
+		//!Get the ion ID from its short or long name, returns -1 if name does not exist. Case must match
+		
+		unsigned int getIonID(const char *name, bool useShortName=true) const;	
+		unsigned int getIonID(const std::string &name) const {return getIonID(name.c_str());};	
 		
 		//!Set the ion ID for a given range
 		void setIonID(unsigned int range, unsigned int newIonId);
@@ -212,7 +231,7 @@ class RangeFile
 
 		//!Check to see if an atom is ranged
 		/*! Returns true if rangefile holds at least one range with shortname
-		 * corresponding input value. Case sensitivite search is default
+		 * corresponding input value. Case sensitivity search is default
 		 */
 		bool isRanged(std::string shortName, bool caseSensitive=true);
 
@@ -246,12 +265,28 @@ class RangeFile
 		bool moveBothRanges(unsigned int range, float newLow, float newHigh);
 
 		//!Add a range to the rangefile. Returns ID number of added range
-		// if adding successful, (unsigned int)-1 otherwise
+		// if adding successful, (unsigned int)-1 otherwise.
+		/// If enforceConsistency is true, this will disallow addition of ranges that
+		// collide with existing ranges
 		unsigned int addRange(float start, float end, unsigned int ionID);
 
 		//Add the ion to the database returns ion ID if successful, -1 otherwise
-		unsigned int addIon(std::string &shortName, std::string &longName, RGBf &ionCol);
-		
+		unsigned int addIon(const std::string &shortName, const std::string &longName, const RGBf &ionCol);
+	
+		bool setRangeStart(unsigned int rangeID, float v);
+
+		bool setRangeEnd(unsigned int rangeID, float v);
+
+		//Erase given range
+		void eraseRange(size_t rangeId) ;
+
+		//erase given ions and associated rnagefes)
+		void eraseIon(size_t ionId);
+
+		//Break a given string down into a series of substring-count pairs depicting basic ionic components
+		static bool decomposeIonNames(const std::string &name,
+
+			std::vector<std::pair<std::string,size_t> > &fragments);
 };
 
 #endif
diff --git a/src/backend/APT/abundanceParser.cpp b/src/backend/APT/abundanceParser.cpp
new file mode 100644
index 0000000..477dfe5
--- /dev/null
+++ b/src/backend/APT/abundanceParser.cpp
@@ -0,0 +1,355 @@
+/* 
+ * Copyright (C) 2013  D Haley
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#include "abundanceParser.h"
+
+#include "common/xmlHelper.h"
+#include "common/stringFuncs.h"
+
+#include <iostream>
+#include <cstdlib>
+#include <stack>
+#include <map>
+#include <cmath>
+#include <limits>
+#include <algorithm>
+#include <numeric>
+
+using std::vector;
+using std::pair;
+using std::make_pair;
+using std::map;
+
+const char *ABUNDANCE_ERROR[] = { "Unable to read abundance data (opening file)",
+				 "Unable to create XML reader.",
+				 "Bad property found in XML file",
+				 "XML document did not match expected layout (DTD validation)",
+				 "Unable to find required node during parse",
+				 "Root node missing, expect <atomic-mass-table>!",
+				 "Found incorrect root node. Expected <atomic-mass-table>"
+};
+
+
+const char *AbundanceData::getErrorText(size_t errorCode)
+{
+	ASSERT(errorCode < ABUNDANCE_ERROR_ENUM_END);
+	return ABUNDANCE_ERROR[errorCode];
+}
+
+size_t AbundanceData::numIsotopes() const
+{
+	size_t v=0;
+	for(size_t ui=0;ui<isotopeData.size();ui++)
+		v+=isotopeData[ui].size();
+	
+	return v;
+}
+
+size_t AbundanceData::numElements() const
+{
+	return isotopeData.size();
+}
+
+size_t AbundanceData::open(const char *file, bool strict)
+{
+
+	xmlDocPtr doc;
+	xmlParserCtxtPtr context;
+
+	context =xmlNewParserCtxt();
+
+	if(!context)
+		return ABUNDANCE_ERR_NO_CONTEXT;
+
+	//Open the XML file
+	doc = xmlCtxtReadFile(context, file, NULL, XML_PARSE_DTDVALID| XML_PARSE_NOENT | XML_PARSE_NONET);
+
+	if(!doc)
+	{
+		xmlFreeParserCtxt(context);
+		return ABUNDANCE_ERR_BAD_DOC;
+	}
+	else
+	{
+		//Check for context validity
+		if(!context->valid)
+		{
+			if(strict)
+			{
+				xmlFreeDoc(doc);
+				xmlFreeParserCtxt(context);
+				return ABUNDANCE_ERROR_FAILED_VALIDATION;
+			}
+			else
+			{
+				std::cerr << "Unable to validate XML file. Continuing anyway.." << std::endl;
+			}
+		}
+	}
+
+	try
+	{
+	
+	//retrieve root node	
+	std::stack<xmlNodePtr> nodeStack;
+	xmlNodePtr nodePtr = xmlDocGetRootElement(doc);
+
+	if(!nodePtr)
+		throw ABUNDANCE_ERROR_MISSING_ROOT_NODE;
+	
+	//This *should* be an abundance file
+	if(xmlStrcmp(nodePtr->name, (const xmlChar *)"atomic-mass-table"))
+		throw ABUNDANCE_ERROR_WRONG_ROOT_NODE;
+
+	nodeStack.push(nodePtr);
+
+	nodePtr=nodePtr->xmlChildrenNode;
+	while(!XMLHelpFwdToElem(nodePtr,"entry"))
+	{
+		ISOTOPE_DATA curIsoData;
+		
+		if(XMLHelpGetProp(curIsoData.symbol,nodePtr,"symbol"))
+			throw ABUNDANCE_ERROR_BAD_VALUE;
+		
+		if(XMLHelpGetProp(curIsoData.atomicNumber,nodePtr,"atomic-number"))
+			throw ABUNDANCE_ERROR_BAD_VALUE;
+
+
+		nodeStack.push(nodePtr);
+		nodePtr=nodePtr->xmlChildrenNode;
+		
+		//Move to natural-abundance child
+		if(XMLHelpFwdToElem(nodePtr,"natural-abundance"))
+			throw ABUNDANCE_ERROR_MISSING_NODE;
+		
+		nodePtr=nodePtr->xmlChildrenNode;
+
+		vector<ISOTOPE_DATA> curIsotopes;	
+		//TODO: value checking	
+		while(!XMLHelpFwdToElem(nodePtr,"isotope"))
+		{
+			//Spin to mass node
+			if(XMLHelpGetProp(curIsoData.massNumber,nodePtr,"mass-number"))
+				throw ABUNDANCE_ERROR_MISSING_NODE;
+			
+			nodeStack.push(nodePtr);
+			nodePtr=nodePtr->xmlChildrenNode;
+
+			//Spin to mass node
+			if(XMLHelpFwdToElem(nodePtr,"mass"))
+				throw ABUNDANCE_ERROR_MISSING_NODE;
+
+			if(XMLHelpGetProp(curIsoData.mass,nodePtr,"value"))
+				throw ABUNDANCE_ERROR_BAD_VALUE;
+			
+			if(XMLHelpGetProp(curIsoData.massError,nodePtr,"error"))
+				throw ABUNDANCE_ERROR_BAD_VALUE;
+			else
+				curIsoData.massError=0;
+
+
+			//spin to abundance node
+			if(XMLHelpFwdToElem(nodePtr,"abundance"))
+				throw ABUNDANCE_ERROR_MISSING_NODE;
+			
+			if(XMLHelpGetProp(curIsoData.abundance,nodePtr,"value"))
+				throw ABUNDANCE_ERROR_BAD_VALUE;
+			
+			if(XMLHelpGetProp(curIsoData.abundanceError,nodePtr,"error"))
+				throw ABUNDANCE_ERROR_BAD_VALUE;
+			else
+				curIsoData.abundanceError=0;
+
+			curIsotopes.push_back(curIsoData);
+
+			nodePtr=nodeStack.top();
+			nodePtr=nodePtr->next;
+			nodeStack.pop();
+		}
+
+		isotopeData.push_back(curIsotopes);
+		curIsotopes.clear();	
+
+		nodePtr=nodeStack.top();
+		nodeStack.pop();
+		nodePtr=nodePtr->next;
+		
+	}
+	}
+	catch( int &excep)
+	{
+		xmlFreeDoc(doc);
+		xmlFreeParserCtxt(context);
+		return excep;
+	}
+		
+	xmlFreeDoc(doc);
+	xmlFreeParserCtxt(context);
+	return 0;
+}
+
+
+size_t AbundanceData::symbolIndex(const char *symbol) const
+{
+	for(size_t ui=0;ui<isotopeData.size();ui++)
+	{
+		if(isotopeData[ui].size() && isotopeData[ui][0].symbol == symbol )
+			return ui;
+	}
+
+
+	return (size_t)-1;
+}
+
+const ISOTOPE_DATA &AbundanceData::isotope(size_t elemIdx,size_t isotopeIdx) const
+{
+	return isotopeData[elemIdx][isotopeIdx];
+}
+
+void AbundanceData::generateIsotopeDist(const vector<size_t> &elementIdx,
+					const vector<size_t> &frequency,
+				vector<pair<float,float> > &massDist, size_t chargeCount) const
+{
+	ASSERT(chargeCount);
+	ASSERT(frequency.size() == elementIdx.size());
+	//Search out the given isotopes, and compute the peaks
+	// that would be seen for this isotope combination
+
+	//map of vectors for the available isotopes
+	map<unsigned int, vector< pair<float,float> > > isotopeMassDist;
+	vector<float> bulkConcentration(frequency.size());
+
+	size_t total=std::accumulate(frequency.begin(),frequency.end(),0);
+
+	for(size_t ui=0;ui<frequency.size();ui++)
+		bulkConcentration[ui]=frequency[ui]/(float)total;
+
+	//For each isotope, retrieve  its (mass,probability dist) values
+	// placing into a map
+	//--
+	for(size_t ui=0;ui<elementIdx.size();ui++)
+	{
+		size_t curIso;
+		curIso = elementIdx[ui];
+
+		//If we have seen isotope before, move on
+		if(isotopeMassDist.find(curIso) != isotopeMassDist.end())
+			continue;
+
+		vector<pair<float,float> > thisIsotope;
+		for(size_t uj=0;uj<isotopeData[curIso].size();uj++)
+		{
+			//Compute the probability of this isotope's presence in
+			// the sampled concentration
+			thisIsotope.push_back(make_pair(isotopeData[curIso][uj].mass,
+				isotopeData[curIso][uj].abundance));
+		}
+
+		isotopeMassDist[curIso] = thisIsotope;
+		thisIsotope.clear();
+
+	}
+	//--
+
+
+	//Given the isotopes we have, permute the mass spectra
+	vector<pair<float,float> > peakProbs;
+	for(size_t ui=0;ui<elementIdx.size();ui++)
+	{
+
+		for(size_t repeat=0;repeat<frequency[ui];repeat++)
+		{
+			vector< pair<float,float> >::const_iterator  isoBegin,isoEnd;
+			isoBegin = isotopeMassDist[elementIdx[ui]].begin();
+			isoEnd = isotopeMassDist[elementIdx[ui]].end();
+
+			vector<pair<float,float> > newProbs;
+			//If this is the very first item in our list,
+			// simply push on the value, rather than modifying the
+			// distribution
+			if(peakProbs.empty())
+			{
+				//The masses will be added to, and the probabilities multipled	
+				for(vector<pair<float,float> >::const_iterator it=isoBegin;
+					it!=isoEnd;++it)
+					peakProbs.push_back(*it);
+			}
+			else
+			{
+				for(size_t uj=0;uj<peakProbs.size();uj++)
+				{
+				
+					//The masses will be added to, and the probabilities multipled	
+					for(vector<pair<float,float> >::const_iterator it=isoBegin;
+						it!=isoEnd;++it)
+					{
+						pair<float,float> newMass;
+
+						newMass.first=peakProbs[uj].first+it->first;
+						newMass.second=peakProbs[uj].second*it->second;
+						newProbs.push_back(newMass);
+					}
+
+				}
+				
+				peakProbs.swap(newProbs);
+				newProbs.clear();
+			}
+		}
+	}
+
+
+	float tolerance=sqrt(std::numeric_limits<float>::epsilon());
+
+	vector<bool> killPeaks(peakProbs.size(),false);
+	//Find the non-unique peaks and sum them
+	for(size_t ui=0;ui<peakProbs.size();ui++)
+	{
+		for(size_t uj=ui+1;uj<peakProbs.size();uj++)
+		{
+			if(fabs(peakProbs[ui].first-peakProbs[uj].first) <tolerance &&
+				peakProbs[uj].second > 0.0f)
+			{
+
+				peakProbs[ui].second+=peakProbs[uj].second;
+				peakProbs[uj].second=0.0f;
+				killPeaks[uj]=true;
+			}
+		}
+	}
+	
+	vectorMultiErase(peakProbs,killPeaks);
+	massDist.swap(peakProbs);
+
+
+	for(size_t ui=0;ui<massDist.size();ui++)
+	{
+		massDist[ui].first/=(float)chargeCount;
+	}
+
+}
+
+
+void AbundanceData::getSymbolIndices(const vector<string> &symbols,vector<size_t> &indices) const
+{
+	indices.resize(symbols.size());
+	for(size_t ui=0;ui<symbols.size(); ui++)
+		indices[ui]=symbolIndex(symbols[ui].c_str());
+}
+
diff --git a/src/backend/APT/abundanceParser.h b/src/backend/APT/abundanceParser.h
new file mode 100644
index 0000000..0eb2289
--- /dev/null
+++ b/src/backend/APT/abundanceParser.h
@@ -0,0 +1,99 @@
+/* 
+ * Copyright (C) 2013  D Haley
+ * 
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ABUNDANCE_H
+#define ABUNDANCE_H
+
+#include <vector>
+#include <string>
+#include <utility>
+
+// Example
+//======
+//  |------|
+//  | 2    |<- mass number
+//  |    H |<- Symbol
+//  | 1    |<-  atomic number
+//  |------|
+//    2.014101 <- mass
+//    0.00000000006 <- mass error
+//    0.000115 <- abundance
+//    0.000070 <- abundance error
+//======
+
+struct ISOTOPE_DATA
+{
+	std::string symbol;
+	size_t massNumber,atomicNumber;
+	float mass;
+	float massError; //positive if known, zero if unknown
+	float abundance;
+	float abundanceError; //positive if known, zero if unknown
+};
+
+//!Class to load abundance information for natural isotopse
+class AbundanceData
+{
+	enum
+	{
+		ABUNDANCE_ERR_BAD_DOC,
+		ABUNDANCE_ERR_NO_CONTEXT,
+		ABUNDANCE_ERROR_BAD_VALUE,
+		ABUNDANCE_ERROR_FAILED_VALIDATION,
+		ABUNDANCE_ERROR_MISSING_NODE,
+		ABUNDANCE_ERROR_MISSING_ROOT_NODE,
+		ABUNDANCE_ERROR_WRONG_ROOT_NODE,
+		ABUNDANCE_ERROR_ENUM_END
+	};
+	
+	//!vector of atoms, containing a vector of isotope datasets
+	// First vector is indexed by atomic number
+	std::vector<std::vector<ISOTOPE_DATA> >  isotopeData;
+
+	//atomic numbers for each atom's isotope entry	
+	// this is esentially a lookup (isotope # -> atom #)
+	std::vector<size_t> atomicNumber;
+
+	public:
+		//!Attempt to open the abundance data file, return 0 on success
+		size_t open(const char *file, bool strict=false);	
+
+		static const char *getErrorText(size_t errorCode);
+
+		size_t numIsotopes() const;
+		size_t numElements() const;
+		//Return the elemnl
+		//case sensitive, must match chemistry style Upper[lower], eg Fe.	
+		size_t symbolIndex(const char *symbol) const;
+		//Return a vector of symbol indices
+		void getSymbolIndices(const std::vector<std::string> &symbols,std::vector<size_t> &indices) const;
+
+		std::string elementName(size_t elemIdx ) const { return isotopeData[elemIdx][0].symbol;}
+	
+		const std::vector<ISOTOPE_DATA> &isotopes(size_t offset) const { return isotopeData[offset];}
+
+		//Compute the mass-probability distribution for a set of ions
+		void generateIsotopeDist(const std::vector<size_t> &elementIdx,
+					const std::vector<size_t> &frequency,
+					std::vector<std::pair<float,float> > &massDist,size_t solutionCharge=1) const;
+
+		void generateSingleAtomDist(size_t atomIdx, unsigned int repeatCount, std::vector<std::pair<float,float> > &massDist,size_t solutionCharge=1) const;
+
+		const ISOTOPE_DATA &isotope(size_t elementIdx, size_t isotopeIdx) const;
+};
+
+#endif
diff --git a/src/backend/APT/ionhit.cpp b/src/backend/APT/ionhit.cpp
index 3d15e68..829096e 100644
--- a/src/backend/APT/ionhit.cpp
+++ b/src/backend/APT/ionhit.cpp
@@ -23,6 +23,20 @@
 #endif
 using std::vector;
 
+IonAxisCompare::IonAxisCompare()
+{
+}
+
+IonAxisCompare::IonAxisCompare(unsigned int newAxis)
+{
+	ASSERT(newAxis<3);
+	axis=newAxis;
+}
+
+void IonAxisCompare::setAxis(unsigned int newAxis)
+{
+	axis=newAxis;
+}
 
 IonHit::IonHit() 
 {
@@ -242,13 +256,6 @@ void IonHit::getBoundCube(const std::vector<IonHit> &points,BoundCube &b)
 
 
 #ifdef DEBUG
-bool testIonHit();
-
-
-bool testAPTClasses()
-{
-	return testIonHit();
-}
 
 bool testIonHit()
 {
@@ -259,7 +266,7 @@ bool testIonHit()
 	
 	for(size_t ui=0;ui<8;ui++)
 	{
-		hit.setPos(Point3D(ui&4,ui&2,ui&1));
+		hit.setPos(Point3D(ui&4 >> 2,ui&2 >> 1,ui&1));
 		h.push_back(hit);
 	}
 
@@ -271,11 +278,12 @@ bool testIonHit()
 	for(size_t ui=0;ui<3;ui++)
 	{
 		biggerBox.setBound(ui,0,-1.5f);
-		biggerBox.setBound(ui,0,1.5f);
+		biggerBox.setBound(ui,1,1.5f);
 	}
 
 	TEST(biggerBox.contains(bc),"Check boundcube size");
 
+	return true;
 }
 
 #endif
diff --git a/src/backend/APT/ionhit.h b/src/backend/APT/ionhit.h
index 1c06843..1d4c012 100644
--- a/src/backend/APT/ionhit.h
+++ b/src/backend/APT/ionhit.h
@@ -82,4 +82,21 @@ class IonHit
 		IonHit operator+(const Point3D &obj);
 };
 
+class IonAxisCompare
+{
+	private:
+		unsigned int axis;
+	public:
+		IonAxisCompare();
+		IonAxisCompare(unsigned int newAxis) ;
+		void setAxis(unsigned int newAxis);
+		inline bool operator()(const IonHit &p1,const IonHit &p2) const
+			{return p1.getPos()[axis]<p2.getPos()[axis];};
+};
+
+#ifdef DEBUG
+//unit testing
+bool testIonHit();
+#endif
+
 #endif
diff --git a/src/backend/animator.cpp b/src/backend/animator.cpp
index 549b3ed..cdce457 100644
--- a/src/backend/animator.cpp
+++ b/src/backend/animator.cpp
@@ -200,7 +200,7 @@ std::string PropertyAnimator::getInterpolatedFilterData(size_t filterId,
 		}
 	}
 
-	if(modifyingId == -1)
+	if(modifyingId == (size_t)-1)
 		return std::string("");
 
 	//Scan to see which keyframe has our time in mind
@@ -404,8 +404,8 @@ std::string InterpData::getInterpolatedData(const vector<pair<size_t,
 				tmp=(interpLinearRamp(startF,endF,frame,
 							colStart[ui],colEnd[ui])*255.0f);
 
-				tmp = std::max(tmp,255.0f);
-				tmp=std::min(tmp,0.0f);
+				tmp = std::min(tmp,255.0f);
+				tmp=std::max(tmp,0.0f);
 
 				colInterp[ui] = (unsigned char)tmp;
 			}
diff --git a/src/backend/configFile.cpp b/src/backend/configFile.cpp
index 3618bdd..1b4f034 100644
--- a/src/backend/configFile.cpp
+++ b/src/backend/configFile.cpp
@@ -17,7 +17,7 @@
 */
 
 #include "configFile.h"
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 
 #include "backend/filters/allFilter.h"
@@ -44,9 +44,9 @@ using std::string;
 
 ConfigFile::ConfigFile() : configLoadOK(false), panelMode(CONFIG_PANELMODE_REMEMBER),
 	haveInitialAppSize(false), mouseZoomRatePercent(100),mouseMoveRatePercent(100),
-	allowOnline(true), allowOnlineVerCheck(true), leftRightSashPos(0),
+	wantStartupOrthoCam(false),allowOnline(true), allowOnlineVerCheck(true), leftRightSashPos(0),
 	topBottomSashPos(0),filterSashPos(0),plotListSashPos(0), haveMaxPoints(false),
-	maxPointsScene(0)
+	maxPointsScene(0), doWantStartupTips(true)
 { 
 }
 
@@ -157,7 +157,7 @@ unsigned int ConfigFile::read()
 	}
 
 	//Open the XML file again, but without DTD validation
-	doc = xmlCtxtReadFile(context, filename.c_str(), NULL, 0);
+	doc = xmlCtxtReadFile(context, filename.c_str(), NULL, XML_PARSE_NONET|XML_PARSE_NOENT);
 
 	if(!doc)
 		return CONFIG_ERR_NOFILE;
@@ -469,6 +469,34 @@ unsigned int ConfigFile::read()
 		nodePtr=nodeStack.top();
 		nodeStack.pop();
 
+		nodeStack.push(nodePtr);
+		//have we seen a startup tip entry?
+		if(!XMLHelpFwdToElem(nodePtr,"startuptips"))
+		{
+			std::string str;
+			XMLGetAttrib(nodePtr,str,"value");
+
+			//Check if the user wants startup tips. If we cant understand this, then say no.
+			if(!boolStrDec(str,doWantStartupTips))
+				doWantStartupTips=false;
+		}
+		nodePtr=nodeStack.top();
+		nodeStack.pop();
+		
+		nodeStack.push(nodePtr);
+		//Does the user want, by default, an orthographic camera
+		if(!XMLHelpFwdToElem(nodePtr,"wantorthocam"))
+		{
+			std::string str;
+			XMLGetAttrib(nodePtr,str,"value");
+
+			//Check if the user wants ortho camera, if no idea, revert to not 
+			if(!boolStrDec(str,wantStartupOrthoCam))
+				wantStartupOrthoCam=false;
+		}
+		nodePtr=nodeStack.top();
+		nodeStack.pop();
+
 
 nodeptrEndJump:
 		;
@@ -510,11 +538,14 @@ bool ConfigFile::createConfigDir()
 
 std::string ConfigFile::getConfigDir() 
 {
- 	wxStandardPaths *paths = new wxStandardPaths;
+#if wxCHECK_VERSION(2,9,0)
+ 	wxStandardPaths &paths = wxStandardPaths::Get();
+	wxString filePath = paths.GetDocumentsDir()+wxCStr("/.")+wxCStr(PROGRAM_NAME);
+#else
+	wxStandardPaths *paths = new wxStandardPaths;
 	wxString filePath = paths->GetDocumentsDir()+wxCStr("/.")+wxCStr(PROGRAM_NAME);
-	
 	delete paths;
-	
+#endif
 	return stlStr(filePath);
 }
 
@@ -600,6 +631,9 @@ bool ConfigFile::write()
 	if(haveMaxPoints)
 		f << tabs(1) << "<maxdisplaypoints value=\"" << maxPointsScene << "\"/>" << endl;
 
+	f << tabs(1) << "<startuptips value=\"" << boolStrEnc(doWantStartupTips) << "\"/>" <<endl;
+	f << tabs(1) << "<wantorthocam value=\"" << boolStrEnc(wantStartupOrthoCam) << "\"/>" <<endl;
+
 	f << "</threeDepictconfig>" << endl;
 
 	ASSERT(isValidXML(filename.c_str()));
diff --git a/src/backend/configFile.h b/src/backend/configFile.h
index 2c5cd31..ba13e67 100644
--- a/src/backend/configFile.h
+++ b/src/backend/configFile.h
@@ -73,6 +73,9 @@ class ConfigFile
 		//!Percentile speeds for mouse zoom and move 
 		unsigned int mouseZoomRatePercent,mouseMoveRatePercent;
 
+		//!Want startup orthographic cam
+		bool wantStartupOrthoCam;
+
 		//!Master allow the program to do stuff online check. This is AND-ed, so cannot override disabled items
 		bool allowOnline;
 
@@ -90,6 +93,8 @@ class ConfigFile
 		// 0 for unlimited
 		size_t maxPointsScene;
 
+		//!Does the user want to be shown a startup tip dialog?
+		bool doWantStartupTips;
 	public:
 		ConfigFile(); 
 		~ConfigFile(); 
@@ -175,7 +180,15 @@ class ConfigFile
 		//!Set the position for the plot list panel
 		float getPlotListSashPos()const { return plotListSashPos;};
 
+		//!Does the user want startup tips
+		bool wantStartupTips() const { return doWantStartupTips;}
+		//!Set if tips are to be shown on startup
+		void setWantStartupTips(bool want)  { doWantStartupTips=want;}
+
+		//!Get if user wants an orhtographic camera on startup
+		bool getWantStartupOrthoCam() const { return wantStartupOrthoCam;} 
 
+		void setWantStartupOrthoCam(bool want) { wantStartupOrthoCam=want;}
 };
 
 #endif
diff --git a/src/backend/filter.cpp b/src/backend/filter.cpp
index 7721e15..746d150 100644
--- a/src/backend/filter.cpp
+++ b/src/backend/filter.cpp
@@ -21,7 +21,7 @@
 #include "common/stringFuncs.h"
 #include "common/translation.h"
 
-#include "wxcomponents.h"
+#include "wx/wxcomponents.h"
 
 #include <set>
 
@@ -64,7 +64,7 @@ const char *FILTER_NAMES[] = { "posload",
 				"annotation"
 				};
 
-void updateFilterPropertyGrid(wxPropertyGrid *g, const Filter *f)
+void updateFilterPropertyGrid(wxCustomPropGrid *g, const Filter *f)
 {
 
 	ASSERT(f);
@@ -415,6 +415,9 @@ void PlotStreamData::checkSelfConsistent() const
 	ASSERT(hardMinY<=hardMaxY);
 	//--
 
+	//Needs to have a title
+	ASSERT(dataLabel.size());
+
 	//If we have regions that can be interacted with, need to have parent
 	ASSERT(!(regionID.size() && !regionParent));
 
@@ -579,6 +582,77 @@ void Filter::getSelectionDevices(vector<SelectionDevice *> &outD) const
 #endif
 }
 
+void Filter::propagateCache(vector<const FilterStreamData *> &getOut) const
+{
+
+	ASSERT(filterOutputs.size());
+	//Convert to const pointers (C++ workaround)
+	//--
+	vector<const FilterStreamData *> tmpOut;
+	tmpOut.resize(filterOutputs.size());
+	std::copy(filterOutputs.begin(),filterOutputs.end(),tmpOut.begin());
+	//--
+
+	propagateStreams(tmpOut,getOut);
+}
+
+void Filter::propagateStreams(const vector<const FilterStreamData *> &dataIn,
+		vector<const FilterStreamData *> &dataOut,size_t mask,bool invertMask) const
+{
+	//Propagate any inputs that we don't normally block
+	if(invertMask)
+		mask=~mask;
+	for(size_t ui=0;ui<dataIn.size();ui++)
+	{
+		if(dataIn[ui]->getStreamType() & mask)
+			dataOut.push_back(dataIn[ui]);
+	}
+}
+
+unsigned int Filter::collateIons(const vector<const FilterStreamData *> &dataIn,
+				vector<IonHit> &outVector, ProgressData &prog,
+				bool (*callback)(bool),size_t totalDataSize)
+{
+	if(totalDataSize==(size_t)-1)
+		totalDataSize=numElements(dataIn,STREAM_TYPE_IONS);
+
+
+	ASSERT(totalDataSize== numElements(dataIn,STREAM_TYPE_IONS));
+
+
+	outVector.resize(totalDataSize);
+	size_t offset=0;
+
+
+	for(unsigned int ui=0;ui<dataIn.size() ;ui++)
+	{
+		switch(dataIn[ui]->getStreamType())
+		{
+			case STREAM_TYPE_IONS: 
+			{
+				const IonStreamData *d;
+				d=((const IonStreamData *)dataIn[ui]);
+
+				size_t dataSize=d->data.size();
+
+				#pragma omp parallel for if(dataSize > OPENMP_MIN_DATASIZE)
+				for(size_t ui=0;ui<dataSize; ui++)
+					outVector[offset+ui]=d->data[ui];
+
+				if(!(*callback)(false))
+					return FILTER_ERR_ABORT;
+				offset+=d->data.size();
+
+
+				break;
+			}
+		}
+	}
+
+	return 0;
+}
+				
+
 void Filter::updateOutputInfo(const std::vector<const FilterStreamData *> &dataOut)
 {
 	//Reset the number ouf output streams to zero
diff --git a/src/backend/filter.h b/src/backend/filter.h
index 8d533e1..0e956f8 100644
--- a/src/backend/filter.h
+++ b/src/backend/filter.h
@@ -80,7 +80,7 @@ extern const char *FILTER_NAMES[];
 //Current bitmask using functions are
 //	VisController::safeDeleteFilterList
 const unsigned int NUM_STREAM_TYPES=5;
-const unsigned int STREAMTYPE_MASK_ALL= (1<<(NUM_STREAM_TYPES)) -1;
+const unsigned int STREAMTYPE_MASK_ALL= ((1<<(NUM_STREAM_TYPES)) -1 ) & 0x000000FF;
 enum
 {
 	STREAM_TYPE_IONS=1,
@@ -137,17 +137,24 @@ enum
 	FILE_TYPE_POS
 };
 
+
+enum
+{
+	FILTER_ERR_ABORT=1, //User abort
+	FILTER_ERR_ENUM_END
+};
+
 //---
 //
 
 //Forward dec.
-class wxPropertyGrid;
+class wxCustomPropGrid;
 
 //!Return the number of elements in a vector of filter data - i.e. the sum of the number of objects within each stream. Only masked streams (STREAM_TYPE_*) will be counted
 size_t numElements(const vector<const FilterStreamData *> &vm, unsigned int mask=STREAMTYPE_MASK_ALL);
 
 
-void updateFilterPropertyGrid(wxPropertyGrid *g, const Filter *f);
+void updateFilterPropertyGrid(wxCustomPropGrid *g, const Filter *f);
 
 //!Abstract base class for data types that can propagate through filter system
 class FilterStreamData
@@ -158,7 +165,7 @@ class FilterStreamData
 		//!Parent filter pointer
 		const Filter *parent;
 
-		//!Tells us if the filter has cacehd this data for later use. 
+		//!Tells us if the filter has cached this data for later use. 
 		//this is a boolean value, but not declared as such, as there 
 		//are debug traps to tell us if this is not set by looking for non-boolean values.
 		unsigned int cached;
@@ -166,7 +173,7 @@ class FilterStreamData
 		FilterStreamData();
 		virtual ~FilterStreamData() {}; 
 		virtual size_t getNumBasicObjects() const =0;
-		//!Returns an integer unique to the clas to identify type (yes rttid...)
+		//!Returns an integer unique to the class to identify type (yes rttid...)
 		virtual unsigned int getStreamType() const {return streamType;} ;
 		//!Free mem held by objects
 		virtual void clear()=0;
@@ -256,7 +263,7 @@ public:
 	void sample(float fraction);
 
 	//Duplicate this object, but only using a sampling of the data
-	// vector. The retuend object must be deleted by the
+	// vector. The retuned object must be deleted by the
 	// caller. Cached status is *not* duplicated
 	IonStreamData *cloneSampled(float fraction) const;
 
@@ -330,7 +337,7 @@ class PlotStreamData : public FilterStreamData
 		//!Region colours
 		vector<float> regionR,regionB,regionG;
 
-		//!Region indicies from parent region
+		//!Region indices from parent region
 		vector<unsigned int> regionID;
 
 		//!Region parent filter pointer, used for matching interaction 
@@ -365,7 +372,7 @@ class DrawStreamData: public FilterStreamData
 		//!Returns 0, as this does not store basic object types -- i.e. is not for data storage per se.
 		size_t getNumBasicObjects() const { return 0; }
 
-		//!Erase the drawing vector, deleting its componets
+		//!Erase the drawing vector, deleting its components
 		void clear();
 #ifdef DEBUG
 		//Cross-checks fields to determine if (best guess)
@@ -412,10 +419,9 @@ class Filter
 		bool cache, cacheOK;
 		static bool strongRandom;
 
-		bool wantMonitor;
 
 		//!Array of the number of streams propagated on last refresh
-		//THis is initialised to -1, which is considered invalid
+		//This is initialised to -1, which is considered invalid
 		unsigned int numStreamsLastRefresh[NUM_STREAM_TYPES];
 	
 
@@ -427,6 +433,21 @@ class Filter
 		std::vector<FilterStreamData *> filterOutputs;
 		//!User interaction "Devices" associated with this filter
 		std::vector<SelectionDevice *> devices;
+
+
+
+		//Collate ions from filterstream data into an ionhit vector
+		static unsigned int collateIons(const vector<const FilterStreamData *> &dataIn,
+				vector<IonHit> &outVector, ProgressData &prog,
+				bool (*callback)(bool),size_t totalDataSize=(size_t)-1);
+
+		//!Propagate the given input data to an output vector
+		void propagateStreams(const vector<const FilterStreamData *> &dataIn,
+				vector<const FilterStreamData *> &dataOut,size_t mask=STREAMTYPE_MASK_ALL,bool invertMask=false) const;
+
+		//!Propagate the cache into output
+		void propagateCache(vector<const FilterStreamData *> &dataOut) const;
+
 	public:	
 		Filter() ;
 		virtual ~Filter();
@@ -460,7 +481,7 @@ class Filter
 
 		//!Set the properties for the nth filter, 
 		//!needUpdate tells us if filter output changes due to property set
-		//NOte that if you modify a result without clearing the cache,
+		//Note that if you modify a result without clearing the cache,
 		//then any downstream decision based upon that may not be noted in an update
 		//Take care.
 		virtual bool setProperty(unsigned int key,
@@ -490,8 +511,9 @@ class Filter
 		virtual unsigned int getRefreshEmitMask() const = 0;
 
 
-		//!Mask of filter streams that will not examined by the filter in its computation.
-		// note that these *may* be emitted as a pass-through - check emitmask if needed
+		//!Mask of filter streams that will be examined by the filter in its computation.
+		// note that output may be emitted as a pass-through even if the use is not set
+		// - check emitmask if needed
 		virtual unsigned int getRefreshUseMask() const =0;
 
 		//====
@@ -554,9 +576,9 @@ class Filter
 		//!Get the number of outputs for the specified type during the filter's last refresh
 		unsigned int getNumOutput(unsigned int streamType) const;
 
-		//!Get the filter messages from the console -- also deletes the 
-		// console messages as a side-effect
-		void getConsoleStrings(std::vector<std::string > &v) { v.resize(consoleOutput.size());std::copy(consoleOutput.begin(),consoleOutput.end(),v.begin()); consoleOutput.clear();};
+		//!Get the filter messages from the console. To erase strings, either call erase, or erase cahche
+		void getConsoleStrings(std::vector<std::string > &v) const { v=consoleOutput;};
+		void clearConsole() { consoleOutput.clear();};
 
 		//!Should filters use strong randomisation (where applicable) or not?
 		static void setStrongRandom(bool strongRand) {strongRandom=strongRand;}; 
@@ -589,7 +611,7 @@ class ProgressData
 	public:
 		//!Progress of filter (out of 100) for current filter
 		unsigned int filterProgress;
-		//!Number of filters (n) that we have proccessed (n out of m filters)
+		//!Number of filters (n) that we have processed (n out of m filters)
 		unsigned int totalProgress;
 
 		//!number of filters which need processing for this update
diff --git a/src/backend/filters/K3DTree-mk2.cpp b/src/backend/filters/algorithms/K3DTree-mk2.cpp
similarity index 100%
rename from src/backend/filters/K3DTree-mk2.cpp
rename to src/backend/filters/algorithms/K3DTree-mk2.cpp
diff --git a/src/backend/filters/K3DTree-mk2.h b/src/backend/filters/algorithms/K3DTree-mk2.h
similarity index 100%
rename from src/backend/filters/K3DTree-mk2.h
rename to src/backend/filters/algorithms/K3DTree-mk2.h
diff --git a/src/backend/filters/K3DTree.cpp b/src/backend/filters/algorithms/K3DTree.cpp
similarity index 100%
rename from src/backend/filters/K3DTree.cpp
rename to src/backend/filters/algorithms/K3DTree.cpp
diff --git a/src/backend/filters/K3DTree.h b/src/backend/filters/algorithms/K3DTree.h
similarity index 100%
rename from src/backend/filters/K3DTree.h
rename to src/backend/filters/algorithms/K3DTree.h
diff --git a/src/backend/filters/algorithms/binomial.cpp b/src/backend/filters/algorithms/binomial.cpp
new file mode 100644
index 0000000..0951647
--- /dev/null
+++ b/src/backend/filters/algorithms/binomial.cpp
@@ -0,0 +1,789 @@
+/*
+ *	binomial.cpp - Binomia distribution randomness testing
+ *	Copyright (C) 2013, D Haley 
+
+ *	This program is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
+
+ *	This program is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
+
+ *	You should have received a copy of the GNU General Public License
+ *	along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "binomial.h"
+
+#include "common/basics.h"
+
+#include <gsl/gsl_randist.h>
+#include <gsl/gsl_cdf.h>
+
+#include <map>
+#include <vector>
+#include <utility>
+#include <numeric>
+
+using std::pair;
+using std::vector;
+using std::map;
+using std::unique;
+
+template<class T> 
+class CompareMagFloating
+{
+	public:
+		inline bool operator()(const T &a,const T &b) const
+			{return fabs(a) < fabs(b); }
+};
+
+const unsigned int BINOMIAL_LOWCOUNT_SKEW_THRESHOLD =5;
+
+
+//Helper functions
+//---
+//Obtain an index to the row-major coordinate in array
+int rowMajorOffset(unsigned int x, unsigned int y, unsigned int nY);
+//obtain xy position from array index
+void rowMajorIndicies(unsigned int idx, unsigned int nY, 
+			unsigned int &x, unsigned int &y);
+
+//set the non-extrusion  coordinates for a grid entry
+void setGridABCoords(unsigned int binIdx, unsigned int *direction,unsigned int *nBins,
+		float *binLen, const BoundCube  &totalBound, GRID_ENTRY &gridEntry);
+//---
+
+int countBinnedIons(const std::vector<IonHit> &ions, const RangeFile *rng,
+			const std::vector<size_t> &selectedIons, const SEGMENT_OPTION &segmentOptions,
+			vector<GRID_ENTRY> &completedGridEntries)
+{
+	ASSERT(rng);
+
+	//Step 1 - filter the ions to only the ranges we want to examine
+	std::vector<IonHit> filteredIons;
+
+	//Convert the selection into a map.
+	map<size_t,size_t> selectionMapping;
+	for(size_t ui=0;ui<selectedIons.size();ui++)
+	{
+		ASSERT(selectedIons[ui] < rng->getNumIons());
+		selectionMapping[selectedIons[ui]] = ui;
+	}
+
+	//Filter ions by ranging
+	for(size_t ui=0;ui<ions.size();ui++)
+	{
+		unsigned int ionID;
+		ionID = rng->getIonID(ions[ui].getMassToCharge());
+		
+		//Skip unranged ions
+		if(ionID == (unsigned int)-1)
+			continue;
+
+		filteredIons.push_back(ions[ui]);
+	}
+	
+	//Obtain the bounding box for the filtered ions
+	BoundCube totalBound;
+	IonHit::getBoundCube(filteredIons,totalBound);
+
+	// Sort the ions according to their Z value
+	//--
+	unsigned int extrusionAxis=segmentOptions.extrusionDirection;
+	IonAxisCompare axisCmp(extrusionAxis);
+
+	std::sort(filteredIons.begin(),
+			filteredIons.end(),axisCmp);
+
+	//--
+
+	unsigned int direction[2];
+	float binLen[2];
+	unsigned int nBins[2];
+
+	direction[0]=(extrusionAxis+1)%3;
+	direction[1]=(extrusionAxis+2)%3;
+
+
+	float targetL;
+	//For now, only support autodetection of grid
+	switch(segmentOptions.strategy)
+	{
+		case BINOMIAL_SEGMENT_AUTO_BRICK:
+		{
+			//Attempt to compute the number of ions to segment
+			
+			//The target volume for each grid cube
+			float desiredVolume;
+			desiredVolume= (float)segmentOptions.nIons/(float)filteredIons.size()*totalBound.volume();
+
+			//Compute the target cube size
+			targetL = powf(desiredVolume,1.0f/3.0f);
+
+			//Compute the actual bin size, by attempting
+			// to make them as even as possible
+			for(size_t ui=0; ui<2;ui++)
+			{
+				float s;
+				s= totalBound.getSize(direction[ui]);
+				nBins[ui] = s/targetL+1;
+				binLen[ui] = s/nBins[ui]+1;
+			}
+
+			break;
+		}
+		default:
+			ASSERT(false);
+	}
+
+	//Now extrude the grid through the points in the given extrusion direction
+
+	GRID_ENTRY *gridEntries;
+	size_t nGrids=nBins[0]*nBins[1];
+	try
+	{
+		gridEntries = new GRID_ENTRY[nGrids];
+	}
+	catch(std::bad_alloc)
+	{
+		return BINOMIAL_NO_MEM;
+	}
+
+#ifdef DEBUG
+	BoundCube wrappingBound=totalBound;
+	wrappingBound.expand(0.1f);
+#endif
+
+	//Initialise the grid entries
+	//--
+	float zStart = totalBound.getBound(extrusionAxis,0);
+#pragma omp parallel for 
+	for(size_t ui=0;ui<nGrids;ui++)
+	{
+		//Set the end 
+		gridEntries[ui].nIons.resize(selectedIons.size(),0);
+		gridEntries[ui].totalIons=0;
+		gridEntries[ui].startPt[extrusionAxis]=gridEntries[ui].endPt[extrusionAxis]=zStart;
+
+		setGridABCoords(ui,direction,nBins,binLen,totalBound,gridEntries[ui]);
+	
+		//Set the start, but not the end - as we do that when we have
+		// finished extruding
+		gridEntries[ui].startPt[extrusionAxis]=gridEntries[ui].startPt[extrusionAxis];
+	}
+	//--
+
+	Point3D lowBound;
+	totalBound.getBound(lowBound,0);
+
+	completedGridEntries.reserve((filteredIons.size()/segmentOptions.nIons)*0.5f);
+	for(size_t ui=0;ui<filteredIons.size(); ui++)
+	{	
+		//Find the X y division for hte ion
+		unsigned int xPos,yPos;
+		Point3D ionOffset;
+		ionOffset=filteredIons[ui].getPos() - lowBound;
+		xPos =ionOffset[direction[0]]/binLen[0];
+		yPos = ionOffset[direction[1]]/binLen[1];
+
+		
+		//Find the bin that this new ion is in,
+		// and its range value
+		unsigned int binIdx,selectionId,range;
+		binIdx = rowMajorOffset(xPos,yPos,nBins[1]);
+		
+		//get range
+		range=rng->getIonID(filteredIons[ui].getMassToCharge());
+		ASSERT(range!=(unsigned int)-1);
+
+		//convert range ID to selection ID
+		//TODO: It might be faster not use the map, but rather
+		// to use a fixed (but oversized) array to do the idx remapping.
+		// the mem cost is pretty negligible for any sensible use case
+		ASSERT(selectionMapping.find(range) != selectionMapping.end());
+		selectionId= selectionMapping.find(range)->second;
+
+		//Increment the nIons for the given bin
+		gridEntries[binIdx].nIons[selectionId]++;
+		gridEntries[binIdx].totalIons++;
+
+		//Update grid end
+		gridEntries[binIdx].endPt[extrusionAxis]=ionOffset[extrusionAxis];
+
+		//Check to see if we need to finsh this grid entry
+		if(gridEntries[binIdx].totalIons ==segmentOptions.nIons)
+		{
+#ifdef DEBUG
+			//Set the grid end
+			gridEntries[binIdx].endPt[extrusionAxis] = filteredIons[ui].getPos()[extrusionAxis];
+#endif
+			completedGridEntries.push_back(gridEntries[binIdx]);
+
+			//Reset the grid for the next round
+			// TODO: Should we initialise zStart to this ion,
+			//   or should we snap it to the next ion we encounter?
+			gridEntries[binIdx].startPt[extrusionAxis] =filteredIons[ui].getPos()[extrusionAxis];
+			gridEntries[binIdx].endPt[extrusionAxis]=filteredIons[ui].getPos()[extrusionAxis];
+
+			//Set the box x-y (where extrusion=z)  coordinates.
+			setGridABCoords(binIdx,direction,nBins,
+					binLen,totalBound,gridEntries[binIdx]);
+	
+			//Set the start for the next grid, but not the end
+			gridEntries[binIdx].startPt.setValue(extrusionAxis,gridEntries[binIdx].startPt[extrusionAxis]);
+			
+			for(size_t ui=0;ui<selectedIons.size();ui++)
+				gridEntries[binIdx].nIons[ui]=0;
+			gridEntries[binIdx].totalIons=0;
+
+		}
+
+		ASSERT(gridEntries[binIdx].totalIons < segmentOptions.nIons);
+
+	}
+
+	delete[] gridEntries;
+
+
+	//Go through the grid entries, and delete the ones we don't want
+	vector<bool> killEntries;
+	killEntries.resize(completedGridEntries.size());
+	for(size_t ui=0;ui<completedGridEntries.size();ui++)
+	{
+		float aspect;
+		aspect=completedGridEntries[ui].endPt[extrusionAxis]-completedGridEntries[ui].startPt[extrusionAxis];
+
+		aspect/=targetL;
+		bool doKill;
+		doKill=((aspect > segmentOptions.extrudeMaxRatio) || 
+				(aspect < 1.0f/segmentOptions.extrudeMaxRatio));
+
+		killEntries[ui]=doKill;
+	}
+
+	vectorMultiErase(completedGridEntries,killEntries);
+
+	return 0;
+}
+
+//Vector output is a vector of frequency vectors
+void genBinomialHistogram(const vector<GRID_ENTRY> &completedGridEntries,
+				unsigned int nSelected, BINOMIAL_HIST &binHist)
+				
+{
+	vector<map<unsigned int,unsigned int> >  &mapIonFrequencies = binHist.mapIonFrequencies;
+
+	mapIonFrequencies.resize(nSelected);
+	for(size_t ui=0;ui<completedGridEntries.size();ui++)
+	{
+		ASSERT(completedGridEntries[ui].nIons.size() == nSelected);
+		//Insert all the frequencies for each selected ion into the vector
+		for(size_t uj=0;uj<nSelected;uj++)
+		{
+			//find the frequency we need to update
+			map<unsigned int, unsigned int>::iterator it;
+			size_t val;
+			val=completedGridEntries[ui].nIons[uj];
+			it=mapIonFrequencies[uj].find(val);
+
+			//Add these ions to the running total
+			if(it==mapIonFrequencies[uj].end())
+			{
+				//we don't have an entry for this total, so make a new one
+				mapIonFrequencies[uj][val]=1;
+			}
+			else
+			{
+				//we do have an entry, so accumulate
+				it->second++;
+			}
+		}
+	}
+
+	//Compute the normalised frequencies
+	vector<map<unsigned int, double> > &normFreq= binHist.normalisedFrequencies;
+
+	normFreq.resize(mapIonFrequencies.size());
+	for(size_t ui=0;ui<mapIonFrequencies.size();ui++)
+	{
+		//For each type (vector entry), compute the compositon of each block
+		map<unsigned int,unsigned int>::const_iterator it;
+		size_t total;
+		total=0;
+		for(it=mapIonFrequencies[ui].begin(); it!=mapIonFrequencies[ui].end();++it)
+		{
+			total+=it->second;
+		}
+		//Create the entries for the normalised frequency, watching fout for /= 0
+		for(it=mapIonFrequencies[ui].begin(); it!=mapIonFrequencies[ui].end();++it)
+		{
+			if(total)
+			{
+				normFreq[ui][it->first]=(double)it->second/(double)total;
+			}
+			else
+			{
+				normFreq[ui][it->first]=0;
+			}
+		}
+	}
+
+
+}
+
+
+void computeBinomialStats(const vector<GRID_ENTRY> &gridEntries, const BINOMIAL_HIST &binHist,
+				unsigned int nSelected, BINOMIAL_STATS &stats)
+{
+	stats.nBlocks=gridEntries.size();	
+	stats.nIons=gridEntries[0].totalIons;
+
+	//Compute mean
+	//--
+	stats.mean.resize(nSelected);
+	for(size_t ui=0;ui<stats.nBlocks; ui++)
+	{
+		for(size_t uj=0;uj<gridEntries[ui].nIons.size();uj++)
+			stats.mean[uj]+=gridEntries[ui].nIons[uj];
+	}
+	for(size_t ui=0;ui<stats.mean.size();ui++)
+		stats.mean[ui]/=(float)stats.nBlocks;
+	//--
+	
+
+	//Compute chi-square, by comparing the observed frequency 
+	// distribution with the theoretical (binomial) one
+	// chi_Square = sigma( x_i - mean)  / mean
+	//--
+
+	vector<size_t> nChiCounted;
+	nChiCounted.resize(nSelected,0);
+	stats.chiSquare.resize(nSelected,0);
+
+	CompareMagFloating<double> cmpMag;
+	for(size_t ui=0;ui<nSelected; ui++)
+	{
+		//Probability of "success" - which here is the concentration
+		// of the current species.
+		double p;
+		p = stats.mean[ui]/(double)stats.nIons;
+		unsigned int nTotal;
+		nTotal= gridEntries[ui].totalIons;
+
+		//There is a numerical stability concern here, as we will add small
+		// and large numbers repeatedly. This can cause "drift" when summing. To limit it,
+		// one can sim over the smaller entries first, before the larger
+		std::vector<double> sortedNumbers;
+		sortedNumbers.clear();
+
+		for(map<unsigned int,unsigned int>::const_iterator it=binHist.mapIonFrequencies[ui].begin();
+				it!=binHist.mapIonFrequencies[ui].end();++it)
+				
+		{
+
+
+			//Theoretical number of observation (probability*trials) 
+			// of the binomial 
+			double binThrObs;
+			
+			//The number of times we observed (numInBlock) ions.
+			unsigned int nTimesObs;
+			nTimesObs=it->second;
+
+			//Don't count bins with a low count, as per Moody et al, we set this to 5.
+			// This can skew the chi-square statistic
+			if(nTimesObs <BINOMIAL_LOWCOUNT_SKEW_THRESHOLD)
+				continue;
+
+
+			//Number of times we should have observed blocks with
+			// current count (it->first) of ion
+			binThrObs=gsl_ran_binomial_pdf (it->first,p,nTotal)*stats.nBlocks;
+
+			if(!binThrObs)
+				continue;
+
+			//Compute difference between experimental and theoretical dist func, for this bin
+			double delta;
+			delta=(nTimesObs-binThrObs);
+			sortedNumbers.push_back(delta*delta/binThrObs);
+			nChiCounted[ui]++;
+		}
+		std::sort(sortedNumbers.begin(),sortedNumbers.end(),cmpMag);
+		
+		stats.chiSquare[ui]=std::accumulate(sortedNumbers.begin(),
+					sortedNumbers.end(),0.0);
+	}
+	//--
+
+	//Compute the normalised comparison coefficient, "mu"
+	// Moody et al, Microscopy Research and Techniques. 2008
+	//--- 
+	stats.comparisonCoeff.resize(nSelected);
+	for(size_t ui=0;ui<stats.comparisonCoeff.size();ui++)
+	{
+		if(stats.mean[ui])
+			stats.comparisonCoeff[ui]=sqrt(stats.chiSquare[ui]/(stats.mean[ui]*stats.nBlocks + stats.chiSquare[ui]));
+		else 
+			stats.comparisonCoeff[ui]=0;
+	}
+	//--- 
+
+	//Compute the sampling probability values for drawing
+	// this chi-square from the chi-square distribution
+	//---
+	stats.pValueOK.resize(nSelected);
+	stats.pValue.resize(nSelected);
+	for(size_t ui=0;ui<stats.pValue.size();ui++)
+	{
+		if(nChiCounted[ui] < 2)
+		{
+			stats.pValue[ui]=0;
+			stats.pValueOK[ui]=false;
+		}
+		else
+		{
+			stats.pValue[ui]=1.0-gsl_cdf_chisq_P(stats.chiSquare[ui],nChiCounted[ui]-1);
+			stats.pValueOK[ui]=true;
+		}
+	}
+
+	///--
+
+
+}
+
+int rowMajorOffset(unsigned int x, unsigned int y, unsigned int nY)
+{
+	ASSERT( y < nY);
+	return x*nY + y;
+}
+
+void rowMajorIndicies(unsigned int idx, unsigned int nY, 
+		unsigned int &x, unsigned int &y)
+{
+
+	x = idx/nY;
+	y = idx-nY*x;
+}
+
+//binIdx is the offset for the extruded grid (as viewed down grid extrusion axis)
+//direction is the coordinate axes for the grid, binLen is the length of the bin
+// and totalBound is the bounding cube that 
+void setGridABCoords(unsigned int binIdx, unsigned int *direction,unsigned int *nBins,
+		float *binLen, const BoundCube  &totalBound, GRID_ENTRY &gridEntry)
+{
+	float tmpX,tmpY;
+	unsigned int tmpIdx[2];
+	rowMajorIndicies(binIdx,nBins[1],tmpIdx[0],tmpIdx[1]);
+	tmpX = tmpIdx[0]*binLen[0]+totalBound.getBound(direction[0],0);
+	tmpY = tmpIdx[1]*binLen[1]+totalBound.getBound(direction[1],0);
+
+	gridEntry.startPt[direction[0]]=tmpX;
+	gridEntry.startPt[direction[1]]=tmpY;
+	gridEntry.endPt[direction[0]]=tmpX+binLen[0];
+	gridEntry.endPt[direction[1]]=tmpY+binLen[1];
+
+}
+
+#ifdef DEBUG
+#include "common/assertion.h"
+#include "backend/APT/APTRanges.h"
+#include "common/mathfuncs.h"
+
+#include <sys/time.h>
+
+bool testBinomialBinning();
+bool testBinomialGSLChi();
+bool testBinomialRandomnessTruePositive();
+bool testBinomialRandomnessTrueNegative();
+
+
+bool testBinomial()
+{
+	TEST(testBinomialGSLChi(),"Binomial GSL");
+	TEST(testBinomialBinning(),"Binomial Binning");
+	TEST(testBinomialRandomnessTruePositive(),"Binomial random correctly detected");
+	TEST(testBinomialRandomnessTrueNegative(),"Binomial non-random correclty deteced");
+	return true;
+}
+
+
+void generateTestGridEntries(vector<GRID_ENTRY> &gridEntries, unsigned int &nSelected,
+		double underSkewFactor, double PVAL, double NTRIALS, unsigned int NSAMPLE)
+{
+	nSelected=2;
+
+	gsl_rng *r=gsl_rng_alloc(gsl_rng_ranlxs2);
+	timeval tv;
+	gettimeofday(&tv,NULL);
+	long seed =tv.tv_usec+tv.tv_sec; 
+	gsl_rng_set(r, seed);                  // set seed
+
+	gridEntries.resize(NSAMPLE);
+
+	//Fake some binomially sampled data.
+	// The first species will be binomially distributed. The second
+	// is fixed to allow the first to fill quota
+	for(size_t ui=0;ui<gridEntries.size();ui++)
+	{
+		// Should give a p-value of < 0.05
+		gridEntries[ui].nIons.resize(2);
+		gridEntries[ui].nIons[0]=gsl_ran_binomial(r,PVAL,NTRIALS)/underSkewFactor;
+		gridEntries[ui].nIons[1]=NTRIALS-gridEntries[ui].nIons[0];
+
+		gridEntries[ui].totalIons=NTRIALS;
+		gridEntries[ui].startPt[2]=0.1;
+		gridEntries[ui].endPt[2]=0.2;
+	}
+	gsl_rng_free(r);
+}
+
+bool testBinomialRandomnessTrueNegative()
+{
+	const double PVAL=0.7;
+	const double NTRIALS=30;
+
+	const unsigned int NSAMPLE=5000;
+	
+	unsigned int nSelected;
+	vector<GRID_ENTRY> gridEntries;
+	generateTestGridEntries(gridEntries,nSelected,1.2,PVAL,NTRIALS,NSAMPLE);
+
+	//Build the frequency histograms
+	BINOMIAL_HIST binHist;
+	genBinomialHistogram(gridEntries,nSelected,binHist);
+
+	//Compute chi-square
+	//-----------------
+	double chiSq=0;
+	for(map<unsigned int, unsigned int>::iterator it = binHist.mapIonFrequencies[0].begin();
+			it!=binHist.mapIonFrequencies[0].end();++it)
+	{
+		double delta,expected;
+		//This function computes the probability p(k) of obtaining k from a binomial distribution with parameters p and n,
+		// gsl_ran_binomial_pdf(k,p,n)
+		expected = gsl_ran_binomial_pdf(it->first,PVAL,NTRIALS)*NSAMPLE;
+
+		delta=it->second-expected;
+		chiSq+=delta*delta/expected;
+	}
+	//-----------------
+	double pValue=1.0-gsl_cdf_chisq_P(chiSq,binHist.mapIonFrequencies[0].size()-1);
+
+	//Check non-random detected (use a high threshold, as we might run this a lot, 
+	// and triggering failure should be done carefully)
+	TEST(pValue < 0.2,"Confirmation of randomness by pvalue");
+	
+
+
+	BINOMIAL_STATS binStats;
+	computeBinomialStats(gridEntries,binHist,nSelected,binStats);
+
+	TEST(binStats.pValue[0] < 0.2,"Confirmation of binomial stats pvalue");
+	TEST(binStats.pValueOK[0],"Pvalue reported as correctly computed");
+	TEST(fabs(binStats.pValue[0]-pValue)< 0.01,"cross-check pvalue computation");
+
+	return true; 
+}
+
+bool testBinomialRandomnessTruePositive()
+{
+	//Probability of an individual event being first type
+	const double PVAL=0.7;
+	//Number of trials per sample
+	const double NTRIALS=100;
+	//Number of total samples
+	const unsigned int NSAMPLE=500;
+
+	//Make a fake dataset
+	//---
+	unsigned int nSelected;
+	vector<GRID_ENTRY> gridEntries;
+	generateTestGridEntries(gridEntries,nSelected,1.0,PVAL,NTRIALS,NSAMPLE);
+	//---
+
+	//Build the frequency histograms
+	BINOMIAL_HIST binHist;
+	genBinomialHistogram(gridEntries,nSelected,binHist);
+
+	//Compute chi-square
+	//-----------------
+	double chiSq=0;
+	vector<double> sortedNumbers;
+	for(map<unsigned int, unsigned int>::iterator it = binHist.mapIonFrequencies[0].begin();
+			it!=binHist.mapIonFrequencies[0].end();++it)
+	{
+		//TODO: There are correction factors that we could use here, rather than a full discard
+		if(it->second < BINOMIAL_LOWCOUNT_SKEW_THRESHOLD)
+			continue;
+
+		double delta,expected;
+		//This function computes the probability p(k) of obtaining k from a binomial distribution with parameters p and n,
+		// gsl_ran_binomial_pdf(k,p,n)
+		expected = gsl_ran_binomial_pdf(it->first,PVAL,NTRIALS)*NSAMPLE;
+
+
+		delta=it->second-expected;
+		sortedNumbers.push_back(delta/expected);
+	}
+
+
+	CompareMagFloating<double> cmpMag;
+	std::sort(sortedNumbers.begin(),sortedNumbers.end(),cmpMag);
+	chiSq=std::accumulate(sortedNumbers.begin(),sortedNumbers.end(),0.0f);
+	//-----------------
+	
+	if(sortedNumbers.size() <=2)
+	{
+		//Skip tests if no frequency is above the skew threshold
+		WARN(false,"Unlikely (but possible) situation occured - all binomial ions were insufficiently frequent. skipping Chi-square");
+	}
+	else
+	{
+		double pValue=1.0-gsl_cdf_chisq_P(chiSq,binHist.mapIonFrequencies[0].size()-1);
+
+
+		//Its random, but because we might run this test a lot, set a very low statistical threhsold
+		TEST(pValue > 0.00001,"Confirmation of randomness by pvalue");
+		
+
+
+		BINOMIAL_STATS binStats;
+		computeBinomialStats(gridEntries,binHist,nSelected,binStats);
+
+		TEST(binStats.pValue[0] > 0.00001,"Confirmation of binomial stats pvalue");
+		TEST(binStats.pValueOK[0],"Pvalue reported as correctly computed");
+		//Note that this next test is quite wide, as the pvalues are for 
+		// *two different observation underlying probabilities*.
+		//In one, the binomial prob is known (PVAL, eg =0.7), in the other we estimate it 
+		//from obsercvation - which has an error associated with it due to the 
+		//finite number of observations (eg pObs = 0.698). Chi-square is quite sensitive to this
+		//difference.
+		TEST(fabs(binStats.pValue[0]-pValue)/pValue < 2.0,"cross-check pvalue computation");
+	}
+
+	return true; 
+}
+
+bool testBinomialGSLChi()
+{
+	//A p-table says we should get for chisq=3.94, and df = 10, p ~= 0.95
+	//--
+	double pdf=1.0-gsl_cdf_chisq_P(3.94,10);
+
+	TEST(fabs(pdf - 0.95) < 0.01,"Check chi-square distribution definition (chi=3.94,df=10)");
+	
+	pdf=1.0-gsl_cdf_chisq_P(10.83,1);
+	
+	TEST(fabs(pdf - 0.001) < 0.005,"Check Chi-square distribution definition (chi=10.83,df=1)");
+
+
+	pdf=1.0-gsl_cdf_chisq_P(94.9543,100);
+	TEST(fabs(pdf-0.6238) < 0.001, "Check chi-square, chi=94.9543. Df=100");
+
+
+	//---
+
+	return true;
+}
+
+bool testBinomialBinning()
+{
+	RangeFile rng;
+
+	RGBf col;
+	
+	col.red=1.0f;
+	col.green=col.blue=0.0f;
+	rng.addIon("A","A",col);
+	
+	col.red=0.0f;
+	col.blue=1.0f;
+
+	rng.addIon("B","B",col);
+	rng.addRange(0.5,1.5,rng.getIonID("B"));
+	rng.addRange(1.5,2.5,rng.getIonID("B"));
+
+	vector<IonHit> ions;
+	ions.resize(100);
+
+	RandNumGen rnd;
+	rnd.initTimer();
+
+	for(unsigned int ui=0;ui<100; ui++)
+	{
+		ions[ui].setPos(rnd.genUniformDev(),
+		
+				rnd.genUniformDev(),
+				rnd.genUniformDev());
+
+		ions[ui].setMassToCharge( 1 + (ui %2));
+	}
+
+
+	vector<size_t> selectedIons;
+	selectedIons.push_back(0);
+	selectedIons.push_back(1);
+
+	vector<GRID_ENTRY> g;
+
+	SEGMENT_OPTION segOpt;
+	segOpt.nIons=10;
+	segOpt.extrusionDirection=0;
+	segOpt.extrudeMaxRatio=1000;
+	segOpt.strategy=BINOMIAL_SEGMENT_AUTO_BRICK;
+
+	
+
+	//Perform binomial segmentation
+	TEST(!countBinnedIons(ions,&rng,selectedIons,segOpt,g),
+				"binomial binning (auto brick mode)");
+
+	//Check that the number of grids is less than the number of ions
+	TEST(g.size() < ions.size()/segOpt.nIons,"Full bricks only");
+
+	size_t total=0;
+	for(size_t ui=0;ui<g.size(); ui++)
+	{
+		//Check grid extrusion is positive
+		TEST(g[ui].startPt[2] < g[ui].endPt[2], "grid extrusion direction");
+		TEST(g[ui].totalIons == segOpt.nIons, "grid ion reported count");
+		size_t kIons;
+		kIons=0;
+		for(size_t uj=0;uj<g[ui].nIons.size();uj++)
+			kIons+=g[ui].nIons[uj];
+
+		TEST(kIons == segOpt.nIons,"Ion recount");
+		total+=kIons;
+	}
+
+	TEST(total <= ions.size(),"Ion count checking");
+
+	BINOMIAL_HIST binomialHistogram;
+	genBinomialHistogram(g,selectedIons.size(),binomialHistogram);
+
+	TEST(binomialHistogram.mapIonFrequencies.size() == selectedIons.size(),"map size")
+
+	for(unsigned int ui=0;ui<binomialHistogram.mapIonFrequencies.size();ui++)
+	{
+		unsigned int binnedTotal=0;
+		for(map<unsigned int, unsigned int>::const_iterator it=
+			binomialHistogram.mapIonFrequencies[ui].begin(); 
+			it!=binomialHistogram.mapIonFrequencies[ui].end();++it)
+		{
+			binnedTotal+=it->second;
+		}
+		TEST(binnedTotal < segOpt.nIons, "Number of observations at given freq should be < number total observations");
+	}
+
+	return true;
+}
+#endif
+
+
+				
diff --git a/src/backend/filters/algorithms/binomial.h b/src/backend/filters/algorithms/binomial.h
new file mode 100644
index 0000000..b7eeb5e
--- /dev/null
+++ b/src/backend/filters/algorithms/binomial.h
@@ -0,0 +1,117 @@
+/*
+ *	binomial.h - Binomia distribution randomness testing
+ *	Copyright (C) 2013, D Haley 
+
+ *	This program is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
+
+ *	This program is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
+
+ *	You should have received a copy of the GNU General Public License
+ *	along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef BINOMIAL_H
+#define BINOMIAL_H
+
+#include "common/mathfuncs.h"
+#include "backend/APT/ionhit.h"
+#include "backend/APT/APTRanges.h"
+
+#include <map>
+
+enum
+{
+	BINOMIAL_SEGMENT_AUTO_BRICK,
+	BINOMIAL_SEGMENT_END
+};
+
+struct SEGMENT_OPTION
+{
+	//Segmentation mode
+	size_t strategy;
+
+	//Target number of ions in each segment
+	size_t nIons;
+
+	//Directin for extrusion
+	size_t extrusionDirection;
+
+	//Extrusion options
+	//--
+	//Maximum allowed distance for grid extrusion
+	float extrudeMaxRatio;
+	//--
+};
+
+struct BINOMIAL_HIST
+{
+	//TODO: Each vector is actually the same length. Could place in side
+	// another object instead.
+
+	// each element in vector is for each ion type. Map element inside 
+	// the vector provides a table of observed counts and their frequency.
+	std::vector<std::map<unsigned int,unsigned int> >  mapIonFrequencies;
+
+	// Same as above vector, however, this computes the normalised distribution
+	// i.e., the experimental P distribution
+	std::vector<std::map<unsigned int,double> > normalisedFrequencies;
+	
+	std::vector<std::map<unsigned int,double> > theoreticFrequencies;
+	std::vector<std::map<unsigned int,double> > theoreticNormalisedFrequencies;
+};
+
+
+struct BINOMIAL_STATS
+{
+	std::vector<double> mean,chiSquare, comparisonCoeff,pValue;
+	std::vector<bool> pValueOK;
+	size_t nBlocks,nIons;
+};
+
+struct GRID_ENTRY
+{
+	//Start and end coordinates for the grid.
+	//	the algorithm itself only needs the extrusion axis, however for the
+	//	visualisation, we use the full coordinates
+	Point3D startPt,endPt;
+	std::vector<unsigned int> nIons;
+	//FIXME: This does not need to be here.
+	unsigned int totalIons;
+};
+
+//Binomial algorithm error codes
+enum
+{
+	BINOMIAL_NO_MEM=1,
+	BINOMIAL_ERR_END
+};
+
+//Compute the experimental binomial distribution for the specified ions.
+int countBinnedIons(const std::vector<IonHit> &ions, const RangeFile *rng,
+			const std::vector<size_t> &selectedIons, const SEGMENT_OPTION &segmentOptions,
+			std::vector<GRID_ENTRY> &completedGridEntries);
+
+//Generate a vector of ion frequencies in histogram of segment counts, 
+void genBinomialHistogram(const std::vector<GRID_ENTRY> &completedGridEntries,
+				unsigned int nSelected, BINOMIAL_HIST &binHist);
+
+//convert grid frequencies to compositions
+
+void binomialConvert(const std::vector<std::map<unsigned int,unsigned int> > &ionFrequencies,float binWidth, 
+				std::vector<std::vector<float> > &ionConcentrations); 
+
+
+void computeBinomialStats(const std::vector<GRID_ENTRY> &gridEntries,const BINOMIAL_HIST &binHist,
+		unsigned int nSelected, BINOMIAL_STATS &binStats);
+
+#ifdef DEBUG
+//Perform unit tests on binomial algorithm
+bool testBinomial();
+#endif
+
+#endif
diff --git a/src/backend/filters/rdf.cpp b/src/backend/filters/algorithms/rdf.cpp
similarity index 99%
rename from src/backend/filters/rdf.cpp
rename to src/backend/filters/algorithms/rdf.cpp
index 3b1b31b..08e5666 100644
--- a/src/backend/filters/rdf.cpp
+++ b/src/backend/filters/algorithms/rdf.cpp
@@ -18,7 +18,7 @@
 
 #include "rdf.h"
 
-#include "filterCommon.h"
+#include "../filterCommon.h"
 
 using std::vector;
 
@@ -815,9 +815,10 @@ unsigned int generate1DAxialNNHist(const vector<Point3D> &pointList, const K3DTr
 		{
 			float temp;
 			temp=(*nnPoints[uj]-pointList[ui]).dotProd(axisDir);
+			//Use int type to catch small underflows
 			int offset=(int)(((0.5f*temp)/maxOfMaxDists+0.5f)*numBins);
 
-			if(offset < numBins && offset >=0)	
+			if(offset < (int)numBins && offset >=0)	
 			{
 				//TODO: OpenMP could use multiple histograms
 				// rather than locking
diff --git a/src/backend/filters/rdf.h b/src/backend/filters/algorithms/rdf.h
similarity index 100%
rename from src/backend/filters/rdf.h
rename to src/backend/filters/algorithms/rdf.h
diff --git a/src/backend/filters/annotation.cpp b/src/backend/filters/annotation.cpp
index 811bfa3..c010451 100644
--- a/src/backend/filters/annotation.cpp
+++ b/src/backend/filters/annotation.cpp
@@ -124,6 +124,7 @@ Filter *AnnotateFilter::cloneUncached() const
 	for(unsigned int ui=0;ui<3; ui++)
 		p->anglePos[ui]=anglePos[ui];
 
+	p->annotateText=annotateText;
 	p->textSize=textSize;
 	p->annotateSize=annotateSize;
 	p->sphereMarkerSize=sphereMarkerSize;
@@ -164,10 +165,9 @@ unsigned int AnnotateFilter::refresh(const std::vector<const FilterStreamData *>
 	clearDevices();
 
 	//Pipe everything through
-	getOut.resize(dataIn.size());
-	for(size_t ui=0;ui<dataIn.size();ui++)
-		getOut[ui] = dataIn[ui];
+	propagateStreams(dataIn,getOut);
 
+	//If we are not endabled, do not draw anyhting into the output
 	if(!active)
 		return 0;
 
diff --git a/src/backend/filters/boundingBox.cpp b/src/backend/filters/boundingBox.cpp
index 98f2ec9..6e2ebe4 100644
--- a/src/backend/filters/boundingBox.cpp
+++ b/src/backend/filters/boundingBox.cpp
@@ -366,9 +366,7 @@ unsigned int BoundingBoxFilter::refresh(const std::vector<const FilterStreamData
 
 	if(!isVisible)
 	{
-		for(unsigned int ui=0;ui<dataIn.size();ui++)
-			getOut.push_back(dataIn[ui]);
-
+		propagateStreams(dataIn,getOut);
 		return 0;
 	}
 
diff --git a/src/backend/filters/clusterAnalysis.cpp b/src/backend/filters/clusterAnalysis.cpp
index 185b671..5f78578 100644
--- a/src/backend/filters/clusterAnalysis.cpp
+++ b/src/backend/filters/clusterAnalysis.cpp
@@ -26,7 +26,7 @@
 
 #include <gsl/gsl_linalg.h>
 
-#include "K3DTree-mk2.h"
+#include "algorithms/K3DTree-mk2.h"
 
 
 enum
@@ -451,8 +451,7 @@ unsigned int ClusterAnalysisFilter::refresh(const std::vector<const FilterStream
 	//use the cached copy if we have it.
 	if(cacheOK)
 	{
-		for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateCache(getOut);
 		return 0;
 	}
 
diff --git a/src/backend/filters/compositionProfile.cpp b/src/backend/filters/compositionProfile.cpp
index dc5119f..1397058 100644
--- a/src/backend/filters/compositionProfile.cpp
+++ b/src/backend/filters/compositionProfile.cpp
@@ -147,6 +147,7 @@ unsigned int CompositionProfileFilter::refresh(const std::vector<const FilterStr
 								bool (*callback)(bool))
 {
 	//Clear selection devices
+	// FIXME: Leaking drawables.
 	clearDevices();
 	
 	if(showPrimitive)
@@ -291,17 +292,12 @@ unsigned int CompositionProfileFilter::refresh(const std::vector<const FilterStr
 	if(cacheOK)
 	{
 		//propagate our cached plot data.
-		for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateCache(getOut);
 
 		ASSERT(filterOutputs.back()->getStreamType() == STREAM_TYPE_PLOT);
 
-		//Propagate all the incoming data (including ions)
-		for(unsigned int ui=0;ui<dataIn.size() ;ui++)
-		{
-			if(dataIn[ui]->getStreamType() != STREAM_TYPE_IONS)
-				getOut.push_back(dataIn[ui]);
-		}
+		//Propagate all the incoming data (excluding ions)
+		propagateStreams(dataIn,getOut,STREAM_TYPE_IONS,true);
 			
 		return 0;
 	}
@@ -460,7 +456,7 @@ unsigned int CompositionProfileFilter::refresh(const std::vector<const FilterStr
 			if(rngData)
 				plotData[ui]->yLabel= TRANS("Fraction");
 			else
-				plotData[ui]->yLabel= TRANS("Density (\\#.len^3)");
+				plotData[ui]->yLabel= TRANS("Density (\\frac{\\#}{len^3})");
 		}
 		else
 			plotData[ui]->yLabel= TRANS("Count");
@@ -1294,7 +1290,7 @@ bool CompositionProfileFilter::readState(xmlNodePtr &nodePtr, const std::string
 	xmlFree(xmlString);
 	//====
 	
-	//Retreive vector parameters
+	//Retrieve vector parameters
 	//===
 	if(XMLHelpFwdToElem(nodePtr,"vectorparams"))
 		return false;
@@ -1344,7 +1340,7 @@ bool CompositionProfileFilter::readState(xmlNodePtr &nodePtr, const std::string
 	//===	
 
 	nodePtr=tmpNode;
-	//Retreive scalar parameters
+	//Retrieve scalar parameters
 	//===
 	if(XMLHelpFwdToElem(nodePtr,"scalarparams"))
 		return false;
diff --git a/src/backend/filters/dataLoad.cpp b/src/backend/filters/dataLoad.cpp
index 00fdc62..9edbe98 100644
--- a/src/backend/filters/dataLoad.cpp
+++ b/src/backend/filters/dataLoad.cpp
@@ -20,7 +20,7 @@
 //Needed for modification time
 #include <wx/file.h>
 #include <wx/filename.h>
-#include "../../wxcommon.h"
+#include "../../wx/wxcommon.h"
 
 #include "filterCommon.h"
 
@@ -80,7 +80,6 @@ Filter *DataLoadFilter::cloneUncached() const
 	p->g=g;	
 	p->b=b;	
 	p->a=a;	
-	p->fileType=fileType;
 	//Bounding volume
 	p->bound.setBounds(bound);
 	p->volumeRestrict=volumeRestrict;
@@ -98,14 +97,13 @@ Filter *DataLoadFilter::cloneUncached() const
 	p->userString=userString;
 
 	p->wantMonitor=wantMonitor;
-	// this is for a pos file
-	memcpy(p->index, index, sizeof(int) * 4);
 	p->numColumns=numColumns;
 
 	return p;
 }
 
 
+//TODO: Simplify me - enum not required
 void DataLoadFilter::setFileMode(unsigned int fileMode)
 {
 	switch(fileMode)
@@ -169,6 +167,7 @@ size_t DataLoadFilter::numBytesForCache(size_t nObjects) const
 unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *> &dataIn,
 	std::vector<const FilterStreamData *> &getOut, ProgressData &progress, bool (*callback)(bool))
 {
+
 	errStr="";
 	//use the cached copy if we have it.
 	if(cacheOK)
@@ -192,9 +191,9 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 				//have a valid load time?
 				ASSERT(monitorTimestamp!=-1 && monitorSize!=(size_t)-1);
 
-
 				size_t fileSizeVal;
 				getFilesize(ionFilename.c_str(),fileSizeVal);
+
 				if(wxFileModificationTime(wxStr(ionFilename)) ==monitorTimestamp
 					||  fileSizeVal!= monitorSize)
 				{
@@ -208,13 +207,9 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 		//the full function
 		if(doUseCache)
 		{
-			ASSERT(filterOutputs.size());
-			for(unsigned int ui=0;ui<dataIn.size();ui++)
-				getOut.push_back(dataIn[ui]);
+			propagateCache(getOut);
 
-			for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-				getOut.push_back(filterOutputs[ui]);
-		
+			propagateStreams(dataIn,getOut);
 			return 0;
 		}
 	}
@@ -234,8 +229,8 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 	{
 		monitorTimestamp=-1;
 		monitorSize=-1;
-		for(unsigned int ui=0;ui<dataIn.size();ui++)
-			getOut.push_back(dataIn[ui]);
+			
+		propagateStreams(dataIn,getOut);
 
 		return 0;
 	}
@@ -257,6 +252,7 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 		{
 			if(doSample)
 			{
+				
 				//Load the pos file, limiting how much you pull from it
 				if((uiErr = LimitLoadPosFile(numColumns, INDEX_LENGTH, index, ionData->data, ionFilename.c_str(),
 									maxIons,progress.filterProgress,callback,strongRandom)))
@@ -266,9 +262,11 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 					errStr=TRANS(POS_ERR_STRINGS[uiErr]);
 					return uiErr;
 				}
+		
 			}	
 			else
 			{
+				//Load the entirety of the file
 				if((uiErr = GenericLoadFloatFile(numColumns, INDEX_LENGTH, index, ionData->data, ionFilename.c_str(),
 									progress.filterProgress,callback)))
 				{
@@ -278,6 +276,29 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 					return uiErr;
 				}
 			}	
+			
+			//warn the user if we have not loaded all the data. Users keep missing this 
+			//--
+			size_t fileSizeVal;
+			getFilesize(ionFilename.c_str(),fileSizeVal);
+			size_t numAvailable=fileSizeVal/(numColumns*sizeof(float));
+			if(ionData->data.size() < numAvailable)
+			{
+				string strNumLoaded,strNumAvailable;
+				stream_cast(strNumLoaded,ionData->data.size());
+				stream_cast(strNumAvailable,numAvailable);
+				consoleOutput.push_back(string(TRANS("Sampling is active, loaded ")) + strNumLoaded + 
+					string( TRANS(" of " ) ) + strNumAvailable + string(TRANS(" available.")));
+
+			}
+			else
+			{
+				string strNumAvailable;
+				stream_cast(strNumAvailable,numAvailable);
+
+				consoleOutput.push_back(string(TRANS("Loaded entire dataset, " )) + strNumAvailable + string(TRANS(" points.")));
+			}
+			//--
 			break;
 		}
 		case FILEDATA_TYPE_TEXT:
@@ -347,7 +368,6 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 			ASSERT(false);
 	}
 
-
 	ionData->r = r;
 	ionData->g = g;
 	ionData->b = b;
@@ -376,9 +396,6 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 			       "(magnitude too large). Consider rescaling data before loading"));
 	}
 
-	string s;
-	stream_cast(s,ionData->data.size());
-	consoleOutput.push_back( string(TRANS("Loaded ") + s + TRANS(" Points")) );
 	if(cache)
 	{
 		ionData->cached=1;
@@ -388,13 +405,13 @@ unsigned int DataLoadFilter::refresh(const std::vector<const FilterStreamData *>
 	else
 		ionData->cached=0;
 
-	for(unsigned int ui=0;ui<dataIn.size();ui++)
-		getOut.push_back(dataIn[ui]);
-
 
 	//Append the ion data 
 	getOut.push_back(ionData);
 
+	
+	propagateStreams(dataIn,getOut);
+
 	return 0;
 }
 
@@ -599,6 +616,13 @@ bool DataLoadFilter::setProperty(  unsigned int key,
 		}
 		case DATALOAD_KEY_FILE:
 		{
+			//Ensure is not a dir (posix),
+			// as fstream will open dirs under linux
+#if !defined(WIN32) && !defined(WIN64)
+			if(isNotDirectory(value.c_str()) == false)
+				return false;
+
+#endif
 			//ensure that the new file can be found
 			//Try to open the file
 			std::ifstream f(value.c_str());
diff --git a/src/backend/filters/externalProgram.cpp b/src/backend/filters/externalProgram.cpp
index 15b766e..8bc8db1 100644
--- a/src/backend/filters/externalProgram.cpp
+++ b/src/backend/filters/externalProgram.cpp
@@ -19,19 +19,12 @@
 
 #include "filterCommon.h"
 
-#include "../../wxcommon.h"
+#include "../../wx/wxcommon.h"
 #include "backend/APT/APTFileIO.h"
 
 #include <wx/filename.h>
 #include <wx/dir.h>
 
-enum
-{
-	KEY_COMMAND,
-	KEY_WORKDIR,
-	KEY_ALWAYSCACHE,
-	KEY_CLEANUPINPUT
-};
 
 //!Error codes
 enum
@@ -82,114 +75,16 @@ size_t ExternalProgramFilter::numBytesForCache(size_t nObjects) const
 		return (size_t)-1; //Say we don't know, we are not going to cache anyway.
 }
 
-unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStreamData *> &dataIn,
-	std::vector<const FilterStreamData *> &getOut, ProgressData &progress, bool (*callback)(bool))
+size_t ExternalProgramFilter::substituteVariables(const std::string &commandStr,
+			const vector<string> &ionOutputNames, const vector<string> &plotOutputNames,std::string &substitutedCommand) 
 {
-	//use the cached copy if we have it.
-	if(cacheOK)
-	{
-		for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
-
-		return 0;
-	}
-
 	vector<string> commandLineSplit;
 
-	splitStrsRef(commandLine.c_str(),' ',commandLineSplit);
+	splitStrsRef(commandStr.c_str(),' ',commandLineSplit);
 	//Nothing to do
 	if(commandLineSplit.empty())
 		return 0;
 
-	vector<string> ionOutputNames,plotOutputNames;
-
-	//Compute the bounding box of the incoming streams
-	string s;
-	wxString tempDir;
-	if(workingDir.size())
-		tempDir=(wxStr(workingDir) +wxT("/inputData"));
-	else
-		tempDir=(wxT("inputData"));
-
-
-	//Create a temporary dir
-	if(!wxDirExists(tempDir) )
-	{
-		//Audacity claims that this can return false even on
-		//success (NoiseRemoval.cpp, line 148).
-		//I was having problems with this function too;
-		//so use their workaround
-		wxMkdir(tempDir);
-
-		if(!wxDirExists(tempDir) )	
-			return MAKEDIR_FAIL;
-
-	}
-	
-	for(unsigned int ui=0;ui<dataIn.size() ;ui++)
-	{
-		switch(dataIn[ui]->getStreamType())
-		{
-			case STREAM_TYPE_IONS:
-			{
-				const IonStreamData *i;
-				i = (const IonStreamData * )(dataIn[ui]);
-
-				if(i->data.empty())
-					break;
-				//Save the data to a file
-				wxString tmpStr;
-
-				tmpStr=wxFileName::CreateTempFileName(tempDir+ wxT("/pointdata"));
-				//wxwidgets has no suffix option... annoying.
-				wxRemoveFile(tmpStr);
-
-				s = stlStr(tmpStr);
-				s+=".pos";
-				if(IonHit::makePos(i->data,s.c_str()))
-				{
-					//Uh-oh problem. Clean up and exit
-					return WRITEPOS_FAIL;
-				}
-
-				ionOutputNames.push_back(s);
-				break;
-			}
-			case STREAM_TYPE_PLOT:
-			{
-				const PlotStreamData *i;
-				i = (const PlotStreamData * )(dataIn[ui]);
-
-				if(i->xyData.empty())
-					break;
-				//Save the data to a file
-				wxString tmpStr;
-
-				tmpStr=wxFileName::CreateTempFileName(tempDir + wxT("/plot"));
-				//wxwidgets has no suffix option... annoying.
-				wxRemoveFile(tmpStr);
-				s = stlStr(tmpStr);
-			        s+= ".xy";
-				if(!writeTextFile(s.c_str(),i->xyData))
-				{
-					//Uh-oh problem. Clean up and exit
-					return WRITEPLOT_FAIL;
-				}
-
-				plotOutputNames.push_back(s);
-				break;
-			}
-			default:
-				break;
-		}	
-	}
-
-	//Nothing to do.
-	if(plotOutputNames.empty() &&
-		ionOutputNames.empty())
-		return 0;
-
-
 	//Construct the command, using substitution
 	string command;
 	unsigned int ionOutputPos,plotOutputPos;
@@ -203,8 +98,8 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 		}
 		else
 		{
-			size_t pos;
-			pos=0;
+			size_t pos,lastPos;
+			lastPos=pos=0;
 
 			string thisCommandEntry;
 			pos =commandLineSplit[ui].find("%",pos);
@@ -220,6 +115,8 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 				char code;
 				code = commandLineSplit[ui][pos+1];
 
+				thisCommandEntry+=commandLineSplit[ui].substr(lastPos,pos-lastPos);
+
 				switch(code)
 				{
 					case '%':
@@ -292,14 +189,132 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 				}
 
 
+				lastPos=pos;
 				pos =commandLineSplit[ui].find("%",pos);
 			}
-			
+		
+			thisCommandEntry+=commandLineSplit[ui].substr(lastPos+1);
+
 			command+= string(" ") + thisCommandEntry;
 		}
 
 	}
 
+
+	command.swap(substitutedCommand);
+
+	return 0;
+}
+
+unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStreamData *> &dataIn,
+	std::vector<const FilterStreamData *> &getOut, ProgressData &progress, bool (*callback)(bool))
+{
+	//use the cached copy if we have it.
+	if(cacheOK)
+	{
+		propagateCache(getOut);
+
+		return 0;
+	}
+
+	if(commandLine.empty())
+		return 0;
+
+	vector<string> ionOutputNames,plotOutputNames;
+
+	//Compute the bounding box of the incoming streams
+	string s;
+	wxString tempDir;
+	if(workingDir.size())
+		tempDir=(wxStr(workingDir) +wxT("/inputData"));
+	else
+		tempDir=(wxT("inputData"));
+
+
+	//Create a temporary dir
+	if(!wxDirExists(tempDir) )
+	{
+		//Audacity claims that this can return false even on
+		//success (NoiseRemoval.cpp, line 148).
+		//I was having problems with this function too;
+		//so use their workaround
+		wxMkdir(tempDir);
+
+		if(!wxDirExists(tempDir) )	
+			return MAKEDIR_FAIL;
+
+	}
+	
+	for(unsigned int ui=0;ui<dataIn.size() ;ui++)
+	{
+		switch(dataIn[ui]->getStreamType())
+		{
+			case STREAM_TYPE_IONS:
+			{
+				const IonStreamData *i;
+				i = (const IonStreamData * )(dataIn[ui]);
+
+				if(i->data.empty())
+					break;
+				//Save the data to a file
+				wxString tmpStr;
+
+				tmpStr=wxFileName::CreateTempFileName(tempDir+ wxT("/pointdata"));
+				//wxwidgets has no suffix option... annoying.
+				wxRemoveFile(tmpStr);
+
+				s = stlStr(tmpStr);
+				s+=".pos";
+				if(IonHit::makePos(i->data,s.c_str()))
+				{
+					//Uh-oh problem. Clean up and exit
+					return WRITEPOS_FAIL;
+				}
+
+				ionOutputNames.push_back(s);
+				break;
+			}
+			case STREAM_TYPE_PLOT:
+			{
+				const PlotStreamData *i;
+				i = (const PlotStreamData * )(dataIn[ui]);
+
+				if(i->xyData.empty())
+					break;
+				//Save the data to a file
+				wxString tmpStr;
+
+				tmpStr=wxFileName::CreateTempFileName(tempDir + wxT("/plot"));
+				//wxwidgets has no suffix option... annoying.
+				wxRemoveFile(tmpStr);
+				s = stlStr(tmpStr);
+			        s+= ".xy";
+				if(!writeTextFile(s.c_str(),i->xyData))
+				{
+					//Uh-oh problem. Clean up and exit
+					return WRITEPLOT_FAIL;
+				}
+
+				plotOutputNames.push_back(s);
+				break;
+			}
+			default:
+				break;
+		}	
+	}
+
+	//Nothing to do.
+	if(plotOutputNames.empty() &&
+		ionOutputNames.empty())
+		return 0;
+
+	std::string substitutedCommand;
+	size_t errCode;
+	errCode=substituteVariables(commandLine,ionOutputNames,plotOutputNames,
+					substitutedCommand);
+	if(errCode)
+		return errCode;
+
 	//If we have a specific working dir; use it. Otherwise just use curdir
 	wxString origDir = wxGetCwd();
 	if(workingDir.size())
@@ -310,13 +325,13 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 	}
 	else
 	{
-		if(!wxSetWorkingDirectory(_(".")))
+		if(!wxSetWorkingDirectory(wxT(".")))
 			return SETWORKDIR_FAIL;
 	}
 
 	bool result;
 	//Execute the program
-	result=wxShell(wxStr(command));
+	result=wxShell(wxStr(substitutedCommand));
 
 	if(cleanInput)
 	{
@@ -348,9 +363,9 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 	wxDir *dir = new wxDir;
 	wxArrayString *a = new wxArrayString;
 	if(workingDir.size())
-		dir->GetAllFiles(wxStr(workingDir),a,_("*.pos"),wxDIR_FILES);
+		dir->GetAllFiles(wxStr(workingDir),a,wxT("*.pos"),wxDIR_FILES);
 	else
-		dir->GetAllFiles(wxGetCwd(),a,_("*.pos"),wxDIR_FILES);
+		dir->GetAllFiles(wxGetCwd(),a,wxT("*.pos"),wxDIR_FILES);
 
 
 	//read the output files, which is assumed to be any "pos" file
@@ -399,9 +414,9 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 
 	a->Clear();
 	if(workingDir.size())
-		dir->GetAllFiles(wxStr(workingDir),a,_("*.xy"),wxDIR_FILES);
+		dir->GetAllFiles(wxStr(workingDir),a,wxT("*.xy"),wxDIR_FILES);
 	else
-		dir->GetAllFiles(wxGetCwd(),a,_("*.xy"),wxDIR_FILES);
+		dir->GetAllFiles(wxGetCwd(),a,wxT("*.xy"),wxDIR_FILES);
 
 	//read the output files, which is assumed to be any "pos" file
 	//in the working dir
@@ -424,7 +439,7 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 			//Possible delimiters to try when loading file
 			//try each in turn
 			const char *delimString ="\t, ";
-			if(!loadTextData(sTmp.c_str(),dataVec,header,delimString))
+			if(loadTextData(sTmp.c_str(),dataVec,header,delimString))
 				return READPLOT_FAIL;
 
 			//Check that the input has the correct size
@@ -451,6 +466,9 @@ unsigned int ExternalProgramFilter::refresh(const std::vector<const FilterStream
 				d->g=1.0;
 				d->b=0;
 				d->a=1.0;
+				d->index=uj;
+				d->plotMode=PLOT_MODE_1D;
+				d->plotStyle=PLOT_TRACE_LINES;
 
 
 				//set the title to the filename (trim the .xy extension
@@ -516,14 +534,14 @@ void ExternalProgramFilter::getProperties(FilterPropGroup &propertyList) const
 	p.data= commandLine;
 	p.type=PROPERTY_TYPE_STRING;
 	p.helpText=TRANS("Full command to send to operating system. See manual for escape sequence meanings");
-	p.key=KEY_COMMAND;
+	p.key=EXTERNALPROGRAM_KEY_COMMAND;
 	propertyList.addProperty(p,curGroup);
 	
 	p.name=TRANS("Work Dir");
 	p.data= workingDir;
 	p.type=PROPERTY_TYPE_STRING;
 	p.helpText=TRANS("Directory to run the command in");
-	p.key=KEY_WORKDIR;		
+	p.key=EXTERNALPROGRAM_KEY_WORKDIR;		
 	propertyList.addProperty(p,curGroup);
 	
 
@@ -536,7 +554,7 @@ void ExternalProgramFilter::getProperties(FilterPropGroup &propertyList) const
 	p.data=tmpStr;
 	p.type=PROPERTY_TYPE_BOOL;
 	p.helpText=TRANS("Erase input files when command completed");
-	p.key=KEY_CLEANUPINPUT;		
+	p.key=EXTERNALPROGRAM_KEY_CLEANUPINPUT;		
 	propertyList.addProperty(p,curGroup);
 	
 	if(alwaysCache)
@@ -548,7 +566,7 @@ void ExternalProgramFilter::getProperties(FilterPropGroup &propertyList) const
 	p.data=tmpStr;
 	p.type=PROPERTY_TYPE_BOOL;
 	p.helpText=TRANS("Assume program does not alter its output, unless inputs from 3Depict are altered");
-	p.key=KEY_ALWAYSCACHE;		
+	p.key=EXTERNALPROGRAM_KEY_ALWAYSCACHE;		
 	propertyList.addProperty(p,curGroup);
 
 }
@@ -559,7 +577,7 @@ bool ExternalProgramFilter::setProperty(  unsigned int key,
 	needUpdate=false;
 	switch(key)
 	{
-		case KEY_COMMAND:
+		case EXTERNALPROGRAM_KEY_COMMAND:
 		{
 			if(commandLine!=value)
 			{
@@ -569,7 +587,7 @@ bool ExternalProgramFilter::setProperty(  unsigned int key,
 			}
 			break;
 		}
-		case KEY_WORKDIR:
+		case EXTERNALPROGRAM_KEY_WORKDIR:
 		{
 			if(workingDir!=value)
 			{
@@ -583,7 +601,7 @@ bool ExternalProgramFilter::setProperty(  unsigned int key,
 			}
 			break;
 		}
-		case KEY_ALWAYSCACHE:
+		case EXTERNALPROGRAM_KEY_ALWAYSCACHE:
 		{
 			string stripped=stripWhite(value);
 
@@ -604,7 +622,7 @@ bool ExternalProgramFilter::setProperty(  unsigned int key,
 			needUpdate=true;
 			break;
 		}
-		case KEY_CLEANUPINPUT:
+		case EXTERNALPROGRAM_KEY_CLEANUPINPUT:
 		{
 			string stripped=stripWhite(value);
 
@@ -785,7 +803,7 @@ bool echoTest()
 	wxString tmpFilename;
 	tmpFilename=wxFileName::CreateTempFileName(wxT(""));
 	s = string(" echo test > ") + stlStr(tmpFilename);
-	TEST(f->setProperty(KEY_COMMAND,s,needUp),"Set prop");
+	TEST(f->setProperty(EXTERNALPROGRAM_KEY_COMMAND,s,needUp),"Set prop");
 
 	//Simulate some data to send to the filter
 	vector<const FilterStreamData*> streamIn,streamOut;
@@ -851,8 +869,8 @@ bool posTest()
 
 	ASSERT(tmpFilename.size());
 	
-	TEST(f->setProperty(KEY_COMMAND,s,needUp),"Set prop");
-	TEST(f->setProperty(KEY_WORKDIR,stlStr(tmpDir),needUp),"Set prop");
+	TEST(f->setProperty(EXTERNALPROGRAM_KEY_COMMAND,s,needUp),"Set prop");
+	TEST(f->setProperty(EXTERNALPROGRAM_KEY_WORKDIR,stlStr(tmpDir),needUp),"Set prop");
 	//Simulate some data to send to the filter
 	vector<const FilterStreamData*> streamIn,streamOut;
 	streamIn.push_back(someData.get());
@@ -887,6 +905,30 @@ bool posTest()
 }
 
 
+bool ExternalProgramFilter::substituteTest()
+{
+	
+	vector<string> ionNames,plotNames;
+	plotNames.push_back("some Plot.xy");
+	ionNames.push_back("my \"pos file.pos");
+
+	string commandLine;
+	commandLine="echo \"My ions are \'%i\'\"";
+
+
+	string resultString;
+	TEST(!substituteVariables(commandLine,ionNames,plotNames,resultString),"substitution fail");
+	TEST(resultString == "echo \"My ions are \'my \"pos file.pos\'\"","substitution fail");
+
+	commandLine=" echo (\"%i\")";
+	TEST(!substituteVariables(commandLine,ionNames,plotNames,resultString),"substitution fail");
+	TEST(resultString == " echo (\"my \"pos file.pos\")","substitution fail");
+
+
+	return true;
+
+}
+
 bool ExternalProgramFilter::runUnitTests() 
 {
 	if(!echoTest())
@@ -895,6 +937,9 @@ bool ExternalProgramFilter::runUnitTests()
 	if(!posTest())
 		return false;
 
+	if(!substituteTest())
+		return false;
+
 	return true;
 }
 
diff --git a/src/backend/filters/externalProgram.h b/src/backend/filters/externalProgram.h
index 7ace6bb..9b2baa5 100644
--- a/src/backend/filters/externalProgram.h
+++ b/src/backend/filters/externalProgram.h
@@ -20,6 +20,15 @@
 
 #include "../filter.h"
 #include "../../common/translation.h"
+
+enum
+{
+	EXTERNALPROGRAM_KEY_COMMAND,
+	EXTERNALPROGRAM_KEY_WORKDIR,
+	EXTERNALPROGRAM_KEY_ALWAYSCACHE,
+	EXTERNALPROGRAM_KEY_CLEANUPINPUT
+};
+
 //!External program filter
 class ExternalProgramFilter : public Filter
 {
@@ -35,6 +44,10 @@ class ExternalProgramFilter : public Filter
 		//!Erase generated input files for ext. program after running?
 		bool cleanInput;
 
+		static size_t substituteVariables(const std::string &commandStr,
+				const vector<string> &ions, const vector<string> &plots, 
+							std::string &substitutedCommand);
+
 	public:
 		//!As this launches external programs, this could be misused.
 		bool canBeHazardous() const {return true;}
@@ -85,6 +98,8 @@ class ExternalProgramFilter : public Filter
 
 #ifdef DEBUG
 		bool runUnitTests();
+
+		bool substituteTest();
 #endif
 };
 
diff --git a/src/backend/filters/filterCommon.cpp b/src/backend/filters/filterCommon.cpp
index fe00b28..47ec65e 100644
--- a/src/backend/filters/filterCommon.cpp
+++ b/src/backend/filters/filterCommon.cpp
@@ -663,7 +663,7 @@ unsigned int doHull(unsigned int bufferSize, double *buffer,
 }
 
 
-DrawColourBarOverlay *makeColourBar(float minV, float maxV,size_t nColours,size_t colourMap) 
+DrawColourBarOverlay *makeColourBar(float minV, float maxV,size_t nColours,size_t colourMap, bool reverseMap) 
 {
 	//Set up the colour bar. Place it in a draw stream type
 	DrawColourBarOverlay *dc = new DrawColourBarOverlay;
@@ -679,7 +679,7 @@ DrawColourBarOverlay *makeColourBar(float minV, float maxV,size_t nColours,size_
 		float value;
 		value = (float)(ui)*(maxV-minV)/(float)nColours + minV;
 		//Pick the desired colour map
-		colourMapWrap(colourMap,rgb,value,minV,maxV);
+		colourMapWrap(colourMap,rgb,value,minV,maxV,reverseMap);
 		r[ui]=rgb[0]/255.0f;
 		g[ui]=rgb[1]/255.0f;
 		b[ui]=rgb[2]/255.0f;
diff --git a/src/backend/filters/filterCommon.h b/src/backend/filters/filterCommon.h
index 9dc69ed..26785aa 100644
--- a/src/backend/filters/filterCommon.h
+++ b/src/backend/filters/filterCommon.h
@@ -130,6 +130,6 @@ unsigned int computeConvexHull(const std::vector<Point3D> &data,
 			std::vector<Point3D> &hullPts, bool freeHull=true);
 
 //Draw a colour bar
-DrawColourBarOverlay *makeColourBar(float minV, float maxV,size_t nColours,size_t colourMap) ;
+DrawColourBarOverlay *makeColourBar(float minV, float maxV,size_t nColours,size_t colourMap, bool reverseMap=false) ;
 
 #endif
diff --git a/src/backend/filters/geometryHelpers.cpp b/src/backend/filters/geometryHelpers.cpp
index 5b3f123..2521ab0 100644
--- a/src/backend/filters/geometryHelpers.cpp
+++ b/src/backend/filters/geometryHelpers.cpp
@@ -144,7 +144,8 @@ void CropHelper::setAlgorithm()
 unsigned int CropHelper::runFilter(const vector<IonHit> &dataIn,
 				vector<IonHit> &dataOut ) 
 {
-
+	//FIXME!: Shouldn't be using this here - should be obeying
+	// system-wide rng preferences
 	RandNumGen rng;
 	rng.initTimer();
 
@@ -253,8 +254,15 @@ unsigned int CropHelper::runFilterParallel(const vector<IonHit> &dataIn,
 
 	if(allocHint > 0.0f)
 	{
+		try
+		{
 		for(size_t ui=0;ui<nThreads;ui++)
 			inside[ui].reserve((unsigned int)( (float)dataIn.size()*allocHint)/nThreads);
+		}
+		catch(std::bad_alloc)
+		{
+			return ERR_CROP_INSUFFICIENT_MEM;
+		}
 	}
 	bool spin=false;
 #pragma omp parallel for 
diff --git a/src/backend/filters/geometryHelpers.h b/src/backend/filters/geometryHelpers.h
index d189a92..ca433ee 100644
--- a/src/backend/filters/geometryHelpers.h
+++ b/src/backend/filters/geometryHelpers.h
@@ -39,6 +39,7 @@ enum
 enum
 {
 	ERR_CROP_CALLBACK_FAIL=1,
+	ERR_CROP_INSUFFICIENT_MEM,
 };
 
 class CropHelper;
diff --git a/src/backend/filters/ionClip.cpp b/src/backend/filters/ionClip.cpp
index 3696be3..9e864e2 100644
--- a/src/backend/filters/ionClip.cpp
+++ b/src/backend/filters/ionClip.cpp
@@ -971,7 +971,7 @@ bool IonClipFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFileD
 		return false;
 	//====
 	
-	//Retreive vector parameters
+	//Retrieve vector parameters
 	//===
 	if(XMLHelpFwdToElem(nodePtr,"vectorparams"))
 		return false;
@@ -980,7 +980,7 @@ bool IonClipFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFileD
 		return false;
 	//===	
 
-	//Retreive scalar parameters
+	//Retrieve scalar parameters
 	//===
 	if(XMLHelpFwdToElem(nodePtr,"scalarparams"))
 		return false;
diff --git a/src/backend/filters/ionColour.cpp b/src/backend/filters/ionColour.cpp
index 3b20249..0de26d5 100644
--- a/src/backend/filters/ionColour.cpp
+++ b/src/backend/filters/ionColour.cpp
@@ -30,6 +30,7 @@ enum
 	KEY_IONCOLOURFILTER_MAPSTART,
 	KEY_IONCOLOURFILTER_MAPEND,
 	KEY_IONCOLOURFILTER_NCOLOURS,
+	KEY_IONCOLOURFILTER_REVERSE,
 	KEY_IONCOLOURFILTER_SHOWBAR,
 };
 
@@ -38,8 +39,8 @@ enum
 	IONCOLOUR_ABORT_ERR
 };
 
-IonColourFilter::IonColourFilter() : colourMap(0), nColours(MAX_NUM_COLOURS),
-	showColourBar(true)
+IonColourFilter::IonColourFilter() : colourMap(0),reverseMap(false), 
+		nColours(MAX_NUM_COLOURS),showColourBar(true)
 {
 	mapBounds[0] = 0.0f;
 	mapBounds[1] = 100.0f;
@@ -57,6 +58,7 @@ Filter *IonColourFilter::cloneUncached() const
 	p->mapBounds[1]=mapBounds[1];
 	p->nColours =nColours;	
 	p->showColourBar =showColourBar;	
+	p->reverseMap=reverseMap;	
 	
 	//We are copying wether to cache or not,
 	//not the cache itself
@@ -80,14 +82,9 @@ unsigned int IonColourFilter::refresh(const std::vector<const FilterStreamData *
 	if(cacheOK)
 	{
 		ASSERT(filterOutputs.size());
-		for(unsigned int ui=0;ui<dataIn.size();ui++)
-		{
-			if(dataIn[ui]->getStreamType() != STREAM_TYPE_IONS)
-				getOut.push_back(dataIn[ui]);
-		}
+		propagateStreams(dataIn,getOut,STREAM_TYPE_IONS,false);
 
-		for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateCache(getOut);
 
 		if(filterOutputs.size() && showColourBar)
 		{
@@ -113,14 +110,16 @@ unsigned int IonColourFilter::refresh(const std::vector<const FilterStreamData *
 		float value;
 		value = (float)ui*(mapBounds[1]-mapBounds[0])/(float)nColours + mapBounds[0];
 		//Pick the desired colour map
-		colourMapWrap(colourMap,rgb,value,mapBounds[0],mapBounds[1]);
+		colourMapWrap(colourMap,rgb,value,mapBounds[0],mapBounds[1],reverseMap);
 	
 		d[ui]->r=rgb[0]/255.0f;
 		d[ui]->g=rgb[1]/255.0f;
 		d[ui]->b=rgb[2]/255.0f;
 		d[ui]->a=1.0f;
 	}
-	
+
+
+
 	//Try to maintain ion size if possible
 	bool haveIonSize,sameSize; // have we set the ionSize?
 	float ionSize;
@@ -192,7 +191,7 @@ unsigned int IonColourFilter::refresh(const std::vector<const FilterStreamData *
 	if(foundIons && showColourBar)
 	{
 		DrawStreamData *d = new DrawStreamData;
-		d->drawables.push_back(makeColourBar(mapBounds[0],mapBounds[1],nColours,colourMap));
+		d->drawables.push_back(makeColourBar(mapBounds[0],mapBounds[1],nColours,colourMap,reverseMap));
 		d->parent=this;
 		d->cached=0;
 		getOut.push_back(d);
@@ -263,14 +262,18 @@ void IonColourFilter::getProperties(FilterPropGroup &propertyList) const
 	p.helpText=TRANS("Colour scheme used to assign points colours by value");
 	propertyList.addProperty(p,curGroup);
 
-	if(showColourBar)
-		tmpStr="1";
-	else
-		tmpStr="0";
 	
+	p.name=TRANS("Reverse map");
+	p.helpText=TRANS("Reverse the colour scale");
+	p.data= boolStrEnc(reverseMap);
+	p.key=KEY_IONCOLOURFILTER_REVERSE;
+	p.type=PROPERTY_TYPE_BOOL;
+	propertyList.addProperty(p,curGroup);
+	
+
 	p.name=TRANS("Show Bar");
 	p.key=KEY_IONCOLOURFILTER_SHOWBAR;
-	p.data=tmpStr;
+	p.data=boolStrEnc(showColourBar);
 	p.type=PROPERTY_TYPE_BOOL;
 	propertyList.addProperty(p,curGroup);
 
@@ -297,6 +300,7 @@ void IonColourFilter::getProperties(FilterPropGroup &propertyList) const
 	p.key=KEY_IONCOLOURFILTER_MAPEND;
 	p.type=PROPERTY_TYPE_REAL;
 	propertyList.addProperty(p,curGroup);
+	
 
 }
 
@@ -328,6 +332,22 @@ bool IonColourFilter::setProperty(  unsigned int key,
 			colourMap=tmpMap;
 			break;
 		}
+		case KEY_IONCOLOURFILTER_REVERSE:
+		{
+			bool newVal;
+			if(!boolStrDec(value,newVal))
+				return false;
+
+			//Only need update if changed
+			if(newVal!=reverseMap)
+			{
+				clearCache();
+				needUpdate=true;
+			}
+
+			reverseMap=newVal;
+			break;
+		}	
 		case KEY_IONCOLOURFILTER_MAPSTART:
 		{
 			float tmpBound;
@@ -368,17 +388,16 @@ bool IonColourFilter::setProperty(  unsigned int key,
 		}
 		case KEY_IONCOLOURFILTER_SHOWBAR:
 		{
-			string stripped=stripWhite(value);
-
-			if(!(stripped == "1"|| stripped == "0"))
+			bool newVal;
+			if(!boolStrDec(value,newVal))
 				return false;
-
-			bool lastVal=showColourBar;
-			showColourBar=(stripped == "1");
-
 			//Only need update if changed
-			if(lastVal!=showColourBar)
+			if(newVal!=showColourBar)
+			{
 				needUpdate=true;
+				clearCache();
+			}
+			showColourBar=newVal;
 			break;
 		}	
 
@@ -415,12 +434,8 @@ bool IonColourFilter::writeState(std::ostream &f,unsigned int format, unsigned i
 				<< mapBounds[1] << "\"/>" << endl;
 			f << tabs(depth+1) << "<ncolours value=\"" << nColours << "\"/>" << endl;
 
-			string str;
-			if(showColourBar)
-				str="1";
-			else
-				str="0";
-			f << tabs(depth+1) << "<showcolourbar value=\"" << str << "\"/>" << endl;
+			f << tabs(depth+1) << "<showcolourbar value=\"" << boolStrEnc(showColourBar)<< "\"/>" << endl;
+			f << tabs(depth+1) << "<reversemap value=\"" << boolStrEnc(reverseMap)<< "\"/>" << endl;
 			
 			f << tabs(depth) << "</" << trueName() << ">" << endl;
 			break;
@@ -534,6 +549,28 @@ bool IonColourFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 
 	xmlFree(xmlString);
 	//====
+	
+	//Check for colour map reversal
+	//=====
+	if(XMLHelpFwdToElem(nodePtr,"reversemap"))
+	{
+		//Didn't exist prior to 0.0.15, assume off
+		reverseMap=false;
+	}
+	else
+	{
+		xmlString=xmlGetProp(nodePtr,(const xmlChar *)"value");
+		if(!xmlString)
+			return false;
+		tmpStr=(char *)xmlString;
+
+		//convert from string to bool 
+		if(!boolStrDec(tmpStr,reverseMap))
+			return false;
+	}
+
+	xmlFree(xmlString);
+	//====
 	return true;
 }
 
diff --git a/src/backend/filters/ionColour.h b/src/backend/filters/ionColour.h
index 96ff982..c57c979 100644
--- a/src/backend/filters/ionColour.h
+++ b/src/backend/filters/ionColour.h
@@ -33,6 +33,8 @@ class IonColourFilter: public Filter
 		 * 8 randColorMap |  9 grayColorMap
 		 */
 		unsigned int colourMap;
+
+		bool reverseMap;
 		//!map start & end (spectrum value to align start and end of map to)
 		float mapBounds[2];
 
diff --git a/src/backend/filters/ionDownsample.cpp b/src/backend/filters/ionDownsample.cpp
index f900a38..f9e7f65 100644
--- a/src/backend/filters/ionDownsample.cpp
+++ b/src/backend/filters/ionDownsample.cpp
@@ -178,13 +178,9 @@ unsigned int IonDownsampleFilter::refresh(const std::vector<const FilterStreamDa
 	//use the cached copy if we have it.
 	if(cacheOK)
 	{
-		for(size_t ui=0;ui<dataIn.size();ui++)
-		{
-			if(dataIn[ui]->getStreamType() != STREAM_TYPE_IONS)
-				getOut.push_back(dataIn[ui]);
-		}
-		for(size_t ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateStreams(dataIn,getOut,STREAM_TYPE_IONS,true);
+		propagateCache(getOut);
+
 		return 0;
 	}
 
@@ -543,11 +539,10 @@ bool IonDownsampleFilter::setProperty(  unsigned int key,
 		{
 			string stripped=stripWhite(value);
 
-			if(!(stripped == "1"|| stripped == "0"))
-				return false;
-
 			bool lastVal=fixedNumOut;
-			fixedNumOut=(stripped=="1");
+
+			if(!boolStrDec(stripped,fixedNumOut))
+				return false;
 
 			//if the result is different, the
 			//cache should be invalidated
@@ -603,12 +598,9 @@ bool IonDownsampleFilter::setProperty(  unsigned int key,
 		{
 			string stripped=stripWhite(value);
 
-			if(!(stripped == "1"|| stripped == "0"))
-				return false;
-
 			bool lastVal=perSpecies;
-
-			perSpecies=(stripped=="1");
+			if(!boolStrDec(stripped,perSpecies))
+				return false;
 
 			//if the result is different, the
 			//cache should be invalidated
@@ -737,12 +729,8 @@ bool IonDownsampleFilter::readState(xmlNodePtr &nodePtr, const std::string &stat
 	//Retrieve number out (yes/no) mode
 	if(!XMLGetNextElemAttrib(nodePtr,tmpStr,"fixednumout","value"))
 		return false;
-	
-	if(tmpStr == "1") 
-		fixedNumOut=true;
-	else if(tmpStr== "0")
-		fixedNumOut=false;
-	else
+
+	if(!boolStrDec(tmpStr,fixedNumOut))
 		return false;
 	//===
 		
@@ -754,20 +742,22 @@ bool IonDownsampleFilter::readState(xmlNodePtr &nodePtr, const std::string &stat
 	if(fraction < 0.0f || fraction > 1.0f)
 		return false;
 	//===
-	
+
+	//Retreive maxafterfilter
+	//---
+	if(!XMLGetNextElemAttrib(nodePtr,maxAfterFilter,"maxafterfilter","value"))
+		return false;
+	//---
 	
 	//Retrieve "perspecies" attrib
 	if(!XMLGetNextElemAttrib(nodePtr,tmpStr,"perspecies","value"))
 		return false;
-	
-	if(tmpStr == "1") 
-		perSpecies=true;
-	else if(tmpStr== "0")
-		perSpecies=false;
-	else
+
+	if(!boolStrDec(tmpStr,perSpecies))
 		return false;
 
 	//Retrieve the ion per-species fractions
+	//--
 	if(XMLHelpFwdToElem(nodePtr,"fractions"))
 		return false;
 
@@ -782,6 +772,8 @@ bool IonDownsampleFilter::readState(xmlNodePtr &nodePtr, const std::string &stat
 	if(!readScalarsXML(nodePtr,ionLimits))
 		return false;
 
+	//--
+	
 	if(ionLimits.size()!=ionFractions.size())
 		return false;
 
diff --git a/src/backend/filters/ionInfo.cpp b/src/backend/filters/ionInfo.cpp
index fa1f546..3e68a73 100644
--- a/src/backend/filters/ionInfo.cpp
+++ b/src/backend/filters/ionInfo.cpp
@@ -176,8 +176,6 @@ Filter *IonInfoFilter::cloneUncached() const
 	p->cache=cache;
 	p->cacheOK=false;
 	p->userString=userString;
-	p->wantVolume=wantVolume;
-	p->volumeAlgorithm=volumeAlgorithm;
 	return p;
 }
 
diff --git a/src/backend/filters/rangeFile.cpp b/src/backend/filters/rangeFile.cpp
index 34bd3e1..b084017 100644
--- a/src/backend/filters/rangeFile.cpp
+++ b/src/backend/filters/rangeFile.cpp
@@ -20,6 +20,9 @@
 #include "filterCommon.h"
 
 #include <algorithm>
+#include <map>
+
+using std::map;
 
 const unsigned int NUM_ROWS_ION=3;
 const unsigned int NUM_ROWS_RANGE=4;
@@ -63,12 +66,17 @@ Filter *RangeFileFilter::cloneUncached() const
 void RangeFileFilter::initFilter(const std::vector<const FilterStreamData *> &dataIn,
 				std::vector<const FilterStreamData *> &dataOut)
 {
+
 	//Copy any input, except range files to output
 	for(size_t ui=0;ui<dataIn.size();ui++)
 	{
 		if(dataIn[ui]->getStreamType() != STREAM_TYPE_RANGE)
 			dataOut.push_back(dataIn[ui]);
 	}
+	
+	//Reset any changed number of ions
+	ASSERT(rng.getNumRanges() ==  enabledRanges.size() &&
+			rng.getNumIons() == enabledIons.size());
 
 	//Create a rangestream data to push through the init phase
 	if(rng.getNumIons() && rng.getNumRanges())
@@ -94,22 +102,20 @@ unsigned int RangeFileFilter::refresh(const std::vector<const FilterStreamData *
 	//use the cached copy of the data if we have it.
 	if(cacheOK)
 	{
-		for(unsigned int ui=0;ui<filterOutputs.size(); ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateCache(getOut);
 
-		for(unsigned int ui=0;ui<dataIn.size() ;ui++)
-		{
-			//We don't cache anything but our modification
-			//to the ion stream data types. so we propagate
-			//these.
-			if(dataIn[ui]->getStreamType() != STREAM_TYPE_IONS)
-				getOut.push_back(dataIn[ui]);
-		}
+		//We don't cache anything but our modification
+		//to the ion stream data types. so we propagate
+		//these.
+		propagateStreams(dataIn,getOut,STREAM_TYPE_IONS,false);
 			
 		return 0;
 	}
 
-	
+
+	ASSERT(enabledRanges.size() == rng.getNumRanges());
+	ASSERT(enabledIons.size() == rng.getNumIons());
+
 	//See if we have enabled ranges and ions
 	bool haveEnabled;
 	haveEnabled= (std::find(enabledRanges.begin(),
@@ -536,6 +542,8 @@ void RangeFileFilter::setRangeData(const RangeFile &rngNew)
 	//Turn all ions to "on" 
 	for(unsigned int ui=0;ui<enabledIons.size(); ui++)
 		enabledIons[ui]=(char)1;
+
+	clearCache();
 }
 
 size_t RangeFileFilter::numBytesForCache(size_t nObjects) const
@@ -1152,7 +1160,8 @@ bool RangeFileFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 	unsigned int ionID;
 	bool enabled;
 	//By default, turn ions off, but use state file to turn them on
-	enabledIons.resize(rng.getNumIons(),false);
+	map<unsigned int ,char> tmpEnabledIons;
+	map<unsigned int, RGBf> tmpCol;
 	while(!XMLHelpFwdToElem(nodePtr,"ion"))
 	{
 		//Get ID value
@@ -1181,7 +1190,7 @@ bool RangeFileFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 		else
 			return false;
 
-		enabledIons[ionID]=enabled;
+		tmpEnabledIons[ionID]=enabled;
 		xmlFree(xmlString);
 		
 		
@@ -1200,10 +1209,11 @@ bool RangeFileFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 		col.red=(float)r/255.0f;
 		col.green=(float)g/255.0f;
 		col.blue=(float)b/255.0f;
-		rng.setColour(ionID,col);	
+		tmpCol[ionID]=col;	
 		xmlFree(xmlString);
 	}
 
+
 	//===
 
 
@@ -1217,7 +1227,7 @@ bool RangeFileFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 	nodePtr=nodePtr->xmlChildrenNode;
 
 	//By default, turn ranges off (cause there are lots of them), and use state to turn them on
-	enabledRanges.resize(rng.getNumRanges(),true);
+	map<unsigned int, char> tmpEnabledRanges;
 	unsigned int rngID;
 	while(!XMLHelpFwdToElem(nodePtr,"range"))
 	{
@@ -1248,10 +1258,24 @@ bool RangeFileFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 			return false;
 
 		xmlFree(xmlString);
-		enabledRanges[rngID]=enabled;
+		tmpEnabledRanges[rngID]=enabled;
 	}
 	//===
 
+	enabledIons.resize(rng.getNumIons(),1);
+	enabledRanges.resize(rng.getNumRanges(),1);
+	
+	//FIXME: HACK: store more data, to confirm validation
+	//If we have the same number of ions, and the same number of ranges,
+	// then update the values
+	if(tmpEnabledIons.size() == rng.getNumIons())
+	{
+		for(size_t ui=0;ui<tmpEnabledIons.size(); ui++)
+			enabledIons[ui] = tmpEnabledIons[ui];
+		
+		for(size_t ui=0;ui<tmpEnabledRanges.size(); ui++)
+			enabledRanges[ui] = tmpEnabledRanges[ui];
+	}
 	return true;
 }
 
diff --git a/src/backend/filters/rangeFile.h b/src/backend/filters/rangeFile.h
index 97b7463..57e6d51 100644
--- a/src/backend/filters/rangeFile.h
+++ b/src/backend/filters/rangeFile.h
@@ -35,7 +35,7 @@ class RangeFileFilter : public Filter
 {
 	private:
 		std::string rngName;
-		//!Vector of chars stating if user has enabled a particular vector or not
+		//!Vector of chars stating if user has enabled a particular range or not
 		std::vector<char> enabledRanges;
 		//!Vector of chars stating if user has enabled a particular Ion or not.
 		std::vector<char> enabledIons;
@@ -52,7 +52,6 @@ class RangeFileFilter : public Filter
 		RangeFile rng;
 
 	public:
-		const RangeFile &getRange() const { return rng;};
 
 		//!Set the format to assume when loading file
 		void setFormat(unsigned int format);
@@ -83,6 +82,7 @@ class RangeFileFilter : public Filter
 		//!Force a re-read of the rangefile, returning false on failure, true on success
 		bool updateRng();
 		
+		const RangeFile &getRange() const { return rng;};
 		//!Set the internal data using the specified range object
 		void setRangeData(const RangeFile &newRange);
 
diff --git a/src/backend/filters/spatialAnalysis.cpp b/src/backend/filters/spatialAnalysis.cpp
index 910fe02..00cfe4d 100644
--- a/src/backend/filters/spatialAnalysis.cpp
+++ b/src/backend/filters/spatialAnalysis.cpp
@@ -19,10 +19,10 @@
 
 
 
-#include "rdf.h"
+#include "algorithms/rdf.h"
 #include "geometryHelpers.h"
 #include "filterCommon.h"
-
+#include "algorithms/binomial.h"
 
 
 enum
@@ -41,7 +41,14 @@ enum
 	KEY_ENABLE_TARGET,
 	KEY_ORIGIN,
 	KEY_NORMAL,
-	KEY_RADIUS
+	KEY_RADIUS,
+	KEY_NUMIONS,
+	KEY_SHOW_BINOM_FREQ,
+	KEY_SHOW_BINOM_NORM_FREQ,
+	KEY_SHOW_BINOM_THEOR_FREQ,
+	KEY_SHOW_BINOM_3D_GRID,
+	KEY_BINOMIAL_MAX_ASPECT,
+	KEY_BINOMIAL_EXTRUDE_DIR,
 };
 
 enum {
@@ -49,6 +56,7 @@ enum {
 	ALGORITHM_DENSITY_FILTER, //Local density filtering
 	ALGORITHM_RDF, //Radial Distribution Function
 	ALGORITHM_AXIAL_DF, //Axial Distribution Function (aka atomvicinity, sdm, 1D rdf)
+	ALGORITHM_BINOMIAL, //Binomial block method for statistical randomness testing
 	ALGORITHM_ENUM_END,
 };
 
@@ -62,7 +70,11 @@ enum{
 enum
 {
 	ABORT_ERR=1,
+	ERR_BINOMIAL_NO_MEM,
+	ERR_BINOMIAL_NO_RANGE,
+	ERR_BINOMIAL_BIN_FAIL,
 	INSUFFICIENT_SIZE_ERR,
+	SPAT_ERR_END_OF_ENUM,
 };
 // == NN analysis filter ==
 
@@ -72,18 +84,20 @@ const char *SPATIAL_ALGORITHMS[] = {
 	NTRANS("Local Density"),
 	NTRANS("Density Filtering"),
 	NTRANS("Radial Distribution"),
-	NTRANS("Axial Distribution")
+	NTRANS("Axial Distribution"),
+	NTRANS("Binomial Distribution")
 	};
 
 const char *STOP_MODES[] = {
-	NTRANS("Fixed Neighbour Count"),
-	NTRANS("Fixed Radius")
+	NTRANS("Neighbour Count"),
+	NTRANS("Radius")
 };
 
 //Switch to determine if algorithms need range propagation or not
 const bool WANT_RANGE_PROPAGATION[] = { false, 
 					true,
 					false,
+					false,
 					false
 					};
 
@@ -123,6 +137,17 @@ SpatialAnalysisFilter::SpatialAnalysisFilter()
 	densityCutoff=1.0f;
 	keepDensityUpper=true;
 
+	//Binomial parameters
+	//--
+	numIonsSegment = 200;
+	showBinomialFrequencies=true;
+	showNormalisedBinomialFrequencies=true;
+	showTheoreticFrequencies=true;
+	extrusionDirection=0;
+	maxBlockAspect=2;
+	showGridOverlay=true;
+	//--
+
 	reductionDistance=distMax;
 
 	cacheOK=false;
@@ -150,7 +175,15 @@ Filter *SpatialAnalysisFilter::cloneUncached() const
 	
 	p->keepDensityUpper=keepDensityUpper;
 	p->densityCutoff=densityCutoff;
-
+	
+	p->numIonsSegment=numIonsSegment;
+	p->maxBlockAspect=maxBlockAspect;
+	p->binWidth=binWidth;
+	p->extrusionDirection=extrusionDirection;
+	p->showBinomialFrequencies=showBinomialFrequencies;
+	p->showNormalisedBinomialFrequencies=showNormalisedBinomialFrequencies;
+	p->showTheoreticFrequencies=showTheoreticFrequencies;
+	p->showGridOverlay=showGridOverlay;
 
 	//We are copying whether to cache or not,
 	//not the cache itself
@@ -246,40 +279,15 @@ unsigned int SpatialAnalysisFilter::refresh(const std::vector<const FilterStream
 	//use the cached copy if we have it.
 	if(cacheOK)
 	{
-		for(unsigned int ui=0;ui<dataIn.size();ui++)
-		{
-			if(dataIn[ui]->getStreamType() != STREAM_TYPE_IONS)
-			{
-				//Only propagate ranges if we want range propagation
-				if(dataIn[ui]->getStreamType() !=STREAM_TYPE_RANGE
-					|| WANT_RANGE_PROPAGATION[algorithm])
-					getOut.push_back(dataIn[ui]);
-			}
-		}
-		for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
+		size_t mask=STREAM_TYPE_IONS;
+		if(WANT_RANGE_PROPAGATION[algorithm])
+			mask|=STREAM_TYPE_RANGE;
 
-
-		switch(algorithm)
-		{
-			case ALGORITHM_AXIAL_DF:
-			{
-				//Create the user interaction device required for the user
-				// to interact with the algorithm parameters 
-				// as this is not cached at this time
-				SelectionDevice *s;
-				DrawStreamData *d= new DrawStreamData;
-				d->parent=this;
-				d->cached=0;
-
-				createCylinder(d,s);
-				devices.push_back(s);
-				getOut.push_back(d);
-				break;
-			}
-			default:
-				;
-		}
+		//Propagate input streams as desired 
+		propagateStreams(dataIn,getOut,mask,true);
+	
+		//Propagate cached objects
+		propagateCache(getOut);
 		return 0;
 	}
 
@@ -290,12 +298,7 @@ unsigned int SpatialAnalysisFilter::refresh(const std::vector<const FilterStream
 	//Nothing to do, but propagate inputs
 	if(!totalDataSize)
 	{
-		//Propagate any inputs that we don't normally block
-		for(size_t ui=0;ui<dataIn.size();ui++)
-		{
-			if(!(dataIn[ui]->getStreamType() & getRefreshBlockMask()))
-				getOut.push_back(dataIn[ui]);
-		}
+		propagateStreams(dataIn,getOut,getRefreshBlockMask());
 		return 0;
 	}
 
@@ -335,6 +338,16 @@ unsigned int SpatialAnalysisFilter::refresh(const std::vector<const FilterStream
 			result=algorithmAxialDf(progress,callback,totalDataSize,
 					dataIn,getOut,rngF);
 			break;
+		case ALGORITHM_BINOMIAL:
+		{
+			if(!rngF)
+			{
+				return ERR_BINOMIAL_NO_RANGE;
+			}
+			result=algorithmBinomial(progress,callback,totalDataSize,
+						dataIn,getOut,rngF);
+			break;
+		}
 		default:
 			ASSERT(false);
 	}
@@ -424,10 +437,7 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 			p.key=KEY_NUMBINS;
 			propertyList.addProperty(p,curGroup);
 
-			if(excludeSurface)
-				tmpStr="1";
-			else
-				tmpStr="0";
+			tmpStr=boolStrEnc(excludeSurface);
 
 			p.name=TRANS("Surface Remove");
 			p.data=tmpStr;
@@ -469,7 +479,7 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 				
 				string sTmp;
 
-				if(std::count(ionSourceEnabled.begin(),
+				if((size_t)std::count(ionSourceEnabled.begin(),
 					ionSourceEnabled.end(),true) == ionSourceEnabled.size())
 					sTmp="1";
 				else
@@ -487,10 +497,7 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 				//once to set sources, once to set targets
 				for(unsigned int ui=0;ui<ionSourceEnabled.size();ui++)
 				{
-					if(ionSourceEnabled[ui])
-						sTmp="1";
-					else
-						sTmp="0";
+					sTmp=boolStrEnc(ionSourceEnabled[ui]);
 					p.name=ionNames[ui];
 					p.data=sTmp;
 					p.type=PROPERTY_TYPE_BOOL;
@@ -502,7 +509,7 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 
 				curGroup++;
 				
-				if(std::count(ionTargetEnabled.begin(),
+				if((size_t)std::count(ionTargetEnabled.begin(),
 					ionTargetEnabled.end(),true) == ionTargetEnabled.size())
 					sTmp="1";
 				else
@@ -519,10 +526,7 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 				//once to set sources, once to set targets
 				for(unsigned int ui=0;ui<ionTargetEnabled.size();ui++)
 				{
-					if(ionTargetEnabled[ui])
-						sTmp="1";
-					else
-						sTmp="0";
+					sTmp=boolStrEnc(ionTargetEnabled[ui]);
 					p.name=ionNames[ui];
 					p.data=sTmp;
 					p.type=PROPERTY_TYPE_BOOL;
@@ -533,6 +537,8 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 				}
 
 			}
+	
+			propertyList.setGroupTitle(curGroup,TRANS("Alg. Params."));
 			break;
 		}	
 		case ALGORITHM_DENSITY_FILTER:
@@ -546,12 +552,8 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 			p.key=KEY_CUTOFF;
 			propertyList.addProperty(p,curGroup);
 			
-			
-			if(keepDensityUpper)
-				tmpStr="1";
-			else
-				tmpStr="0";
-
+		
+			tmpStr=boolStrEnc(keepDensityUpper);
 			p.name=TRANS("Retain Upper");
 			p.data=tmpStr;
 			p.type=PROPERTY_TYPE_BOOL;
@@ -559,10 +561,14 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 			p.key=KEY_RETAIN_UPPER;
 			propertyList.addProperty(p,curGroup);
 			
+			propertyList.setGroupTitle(curGroup,TRANS("Alg. Params."));
 			break;
 		}
 		case ALGORITHM_DENSITY:
+		{
+			propertyList.setGroupTitle(curGroup,TRANS("Alg. Params."));
 			break;
+		}
 		case ALGORITHM_AXIAL_DF:
 		{
 			stream_cast(tmpStr,numBins);
@@ -612,14 +618,92 @@ void SpatialAnalysisFilter::getProperties(FilterPropGroup &propertyList) const
 			p.type=PROPERTY_TYPE_POINT3D;
 			p.helpText=TRANS("Radius of cylinder");
 			propertyList.addProperty(p,curGroup);
+	
+			propertyList.setGroupTitle(curGroup,TRANS("Alg. Params."));
 			break;
 		}
+		case ALGORITHM_BINOMIAL:
+		{
+			//--
+			stream_cast(tmpStr,numIonsSegment);	
+			p.name=TRANS("Block size");
+			p.data=tmpStr;
+			p.type=PROPERTY_TYPE_INTEGER;
+			p.helpText=TRANS("Number of ions to use per block");
+			p.key=KEY_NUMIONS;
+			propertyList.addProperty(p,curGroup);
+			//--
+			
+			//--
+			stream_cast(tmpStr,maxBlockAspect);	
+			p.name=TRANS("Max Block Aspect");
+			p.data=tmpStr;
+			p.type=PROPERTY_TYPE_REAL;
+			p.helpText=TRANS("Maximum allowable block aspect ratio. Blocks above this aspect are discarded. Setting too high decreases correlation strength. Too low causes loss of statistical power.");
+			p.key=KEY_BINOMIAL_MAX_ASPECT;
+			propertyList.addProperty(p,curGroup);
+			//--
+			
+			//--
+			vector<pair<unsigned int, string> > choices;
+			choices.push_back(make_pair(1,"x"));	
+			choices.push_back(make_pair(2,"y"));	
+			choices.push_back(make_pair(0,"z"));	
+			
+			p.name=TRANS("Extrusion Direction");
+			p.data=choiceString(choices,extrusionDirection);
+			p.type=PROPERTY_TYPE_CHOICE;
+			p.helpText=TRANS("Direction in which blocks are extended during construction.");
+			p.key=KEY_BINOMIAL_EXTRUDE_DIR;
+			propertyList.addProperty(p,curGroup);
+			//--
+	
+			propertyList.setGroupTitle(curGroup,TRANS("Alg. Params."));
+			
+			curGroup++;
+	
+			p.name=TRANS("Plot Counts");
+			p.data=boolStrEnc(showBinomialFrequencies);
+			p.type=PROPERTY_TYPE_BOOL;
+			p.helpText=TRANS("Show the counts in the binomial histogram");
+			p.key=KEY_SHOW_BINOM_FREQ;
+			propertyList.addProperty(p,curGroup);
 
+			if(showBinomialFrequencies)
+			{
+				p.name=TRANS("Normalise");
+				p.data=boolStrEnc(showNormalisedBinomialFrequencies);
+				p.type=PROPERTY_TYPE_BOOL;
+				p.helpText=TRANS("Normalise the counts in the binomial histogram to a probability density function");
+				p.key=KEY_SHOW_BINOM_NORM_FREQ;
+				propertyList.addProperty(p,curGroup);
 
+				/* TODO: IMPLEMENT ME
+				p.name=TRANS("Expected Freq");
+				p.data=boolStrEnc(showTheoreticFrequencies);
+				p.type=PROPERTY_TYPE_BOOL;
+				p.helpText=TRANS("Normalise the counts in the binomial histogram to a probability density function");
+				p.key=KEY_SHOW_BINOM_THEOR_FREQ;
+				propertyList.addProperty(p,curGroup);
+				*/
+
+
+				p.name=TRANS("Display Grid");
+				p.data=boolStrEnc(showGridOverlay);
+				p.type=PROPERTY_TYPE_BOOL;
+				p.helpText="Show the extruded grid in the 3D view. This may be slow";
+				p.key=KEY_SHOW_BINOM_3D_GRID;
+				propertyList.addProperty(p,curGroup);
+
+			}
+
+			propertyList.setGroupTitle(curGroup,TRANS("View Options"));
+			break;	
+		}
 		default:
 			ASSERT(false);
 	}
-	propertyList.setGroupTitle(curGroup,TRANS("Alg. Params."));
+	
 	//---
 }
 
@@ -940,6 +1024,127 @@ bool SpatialAnalysisFilter::setProperty(  unsigned int key,
 
 			return true;
 		}
+		case KEY_NUMIONS:
+		{
+			unsigned int ltmp;
+			if(stream_cast(ltmp,value))
+				return false;
+			
+			if(ltmp<=1)
+				return false;
+			
+			numIonsSegment=ltmp;
+			needUpdate=true;
+			clearCache();
+
+			break;
+		}
+		case KEY_SHOW_BINOM_FREQ:
+		{
+			string stripped=stripWhite(value);
+
+			if(!(stripped == "1"|| stripped == "0"))
+				return false;
+
+			bool lastVal=showBinomialFrequencies;
+			showBinomialFrequencies=(stripped=="1");
+
+			//if the result is different, the
+			//cache should be invalidated
+			if(lastVal!=showBinomialFrequencies)
+			{
+				needUpdate=true;
+				clearCache();
+			}
+			
+			break;
+		}
+		case KEY_SHOW_BINOM_NORM_FREQ:
+		{
+			string stripped=stripWhite(value);
+
+			if(!(stripped == "1"|| stripped == "0"))
+				return false;
+
+			bool lastVal=showNormalisedBinomialFrequencies;
+			showNormalisedBinomialFrequencies=(stripped=="1");
+
+			//if the result is different, the
+			//cache should be invalidated
+			if(lastVal!=showNormalisedBinomialFrequencies)
+			{
+				needUpdate=true;
+				clearCache();
+			}
+			
+			break;
+		}
+		case KEY_SHOW_BINOM_THEOR_FREQ:
+		{
+			bool lastVal=showTheoreticFrequencies;
+			
+			if(!boolStrDec(value,showTheoreticFrequencies))
+				return false;
+
+			//if the result is different, the
+			//cache should be invalidated
+			if(lastVal!=showTheoreticFrequencies)
+			{
+				needUpdate=true;
+				clearCache();
+			}
+			
+			break;
+		}
+		case KEY_BINOMIAL_MAX_ASPECT:
+		{
+			float ltmp;
+			if(stream_cast(ltmp,value))
+				return false;
+			
+			if(ltmp<=1)
+				return false;
+			
+			maxBlockAspect=ltmp;
+			needUpdate=true;
+			clearCache();
+
+			break;
+		}
+		case KEY_BINOMIAL_EXTRUDE_DIR:
+		{
+			map<string,unsigned int> choices;
+			choices["x"]=0;
+			choices["y"]=1;
+			choices["z"]=2;
+
+			map<string,unsigned int>::iterator it;
+			it=choices.find(value);
+			
+			if(it == choices.end())
+				return false;
+			
+			extrusionDirection=it->second;
+			needUpdate=true;
+			clearCache();
+			break;
+		}
+		case KEY_SHOW_BINOM_3D_GRID:
+		{
+			bool lastVal=showGridOverlay;
+			if(!boolStrDec(value,showGridOverlay))
+				return false;
+
+			//if the result is different, the
+			//cache should be invalidated
+			if(lastVal!=showGridOverlay)
+			{
+				needUpdate=true;
+				clearCache();
+			}
+			
+			break;
+		}
 		default:
 		{
 			ASSERT(haveRangeParent);
@@ -1022,6 +1227,12 @@ std::string  SpatialAnalysisFilter::getErrString(unsigned int code) const
 			return std::string(TRANS("Spatial analysis aborted by user"));
 		case INSUFFICIENT_SIZE_ERR:
 			return std::string(TRANS("Insufficient data to complete analysis."));
+		case ERR_BINOMIAL_BIN_FAIL:
+			return std::string(TRANS("Insufficient bins in histogram for analysis."));
+		case ERR_BINOMIAL_NO_MEM:
+			return std::string(TRANS("Insufficient memory for binomial. Reduce input size?"));
+		case ERR_BINOMIAL_NO_RANGE:
+			return std::string(TRANS("Binomial requires a parent range file"));
 		default:
 			ASSERT(false);
 
@@ -1032,7 +1243,8 @@ std::string  SpatialAnalysisFilter::getErrString(unsigned int code) const
 
 void SpatialAnalysisFilter::setUserString(const std::string &str)
 {
-	const bool ALGORITHM_HAS_PLOTS[] = { false,false,true,true};
+	//Which algorithms have plot outputs?
+	const bool ALGORITHM_HAS_PLOTS[] = { false,false,true,true,true};
 
 	COMPILE_ASSERT(THREEDEP_ARRAYSIZE(ALGORITHM_HAS_PLOTS) == ALGORITHM_ENUM_END);
 
@@ -1061,6 +1273,8 @@ unsigned int SpatialAnalysisFilter::getRefreshEmitMask() const
 	{
 		case ALGORITHM_RDF:
 			return STREAM_TYPE_IONS | STREAM_TYPE_PLOT;
+		case ALGORITHM_BINOMIAL:
+			return STREAM_TYPE_PLOT | STREAM_TYPE_DRAW;
 		case ALGORITHM_AXIAL_DF:
 			return STREAM_TYPE_IONS | STREAM_TYPE_PLOT | STREAM_TYPE_DRAW;
 		default:
@@ -1093,6 +1307,20 @@ bool SpatialAnalysisFilter::writeState(std::ostream &f,unsigned int format, unsi
 				<< "\" a=\"" << a << "\"/>" <<endl;
 			f << tabs(depth+1) << "<densitycutoff value=\""<<densityCutoff<< "\"/>"  << endl;
 			f << tabs(depth+1) << "<keepdensityupper value=\""<<(int)keepDensityUpper<< "\"/>"  << endl;
+
+
+			//-- Binomial paramters ---
+			f << tabs(depth+1) << "<binomial numions=\""<<numIonsSegment<< "\" maxblockaspect=\"" 
+						<< maxBlockAspect << "\" extrusiondirection=\"" 
+						<< extrusionDirection << "\"/>"  << endl;
+			f << tabs(depth+1) << "<binomialdisplay freqs=\""<<(int)showBinomialFrequencies
+						<< "\" normalisedfreqs=\"" << (int)showNormalisedBinomialFrequencies
+						<< "\" theoreticfreqs=\""<< (int)showTheoreticFrequencies
+						<< "\" gridoverlay=\""<< (int)showGridOverlay 
+						<< "\"/>" << endl;
+
+			//--------------------------
+
 			
 			writeVectorsXML(f,"vectorparams",vectorParams,depth);
 			writeScalarsXML(f,"scalarparams",scalarParams,depth);
@@ -1168,16 +1396,12 @@ bool SpatialAnalysisFilter::readState(xmlNodePtr &nodePtr, const std::string &st
 		return false;
 	//===
 	
-	//Retreive exclude surface on/off
+	//Retrieve exclude surface on/off
 	//===
 	if(!XMLGetNextElemAttrib(nodePtr,tmpStr,"excludesurface","value"))
 		return false;
 	//check that new value makes sense 
-	if(tmpStr == "1")
-		excludeSurface=true;
-	else if( tmpStr == "0")
-		excludeSurface=false;
-	else
+	if(!boolStrDec(tmpStr,excludeSurface))
 		return false;
 	//===
 	
@@ -1208,23 +1432,85 @@ bool SpatialAnalysisFilter::readState(xmlNodePtr &nodePtr, const std::string &st
 	if(!XMLGetNextElemAttrib(nodePtr,tmpStr,"keepdensityupper","value"))
 		return false;
 	//check that new value makes sense 
-	if(tmpStr == "1")
-		keepDensityUpper=true;
-	else if( tmpStr == "0")
-		keepDensityUpper=false;
-	else
+	if(!boolStrDec(tmpStr,keepDensityUpper))
 		return false;
 
 
-	//FIXME: Earlier versions of the state file <= 1441:adaa3a3daa80
+	//FIXME:COMPAT_BREAK : 3Depict <= 1796:5639f6d50732 does not contain
+	// this section
+	xmlNodePtr tmpNode;
+
+	tmpNode=nodePtr;
+	if(!XMLHelpFwdToElem(nodePtr,"binomial"))
+	{
+		unsigned int nSegment;
+		float maxAspect;
+
+		//Retrieve segmentation count
+		if(!XMLGetAttrib(nodePtr,nSegment,"numions"))
+			return false;
+		if(nSegment <= 1)
+			return false;
+		numIonsSegment=nSegment;
+
+
+		//Retrieve and verify aspect ratio
+		if(!XMLGetAttrib(nodePtr,maxAspect,"maxblockaspect"))
+			return false;
+
+		if(maxAspect<1.0f)
+			return false;
+		maxBlockAspect=maxAspect;
+
+		//Get the extrusion direction
+		unsigned int tmpExtr;
+		if(!XMLGetAttrib(nodePtr,tmpExtr,"extrusiondirection"))
+			return false;
+
+		if(tmpExtr >=3)
+			return false;
+		extrusionDirection=tmpExtr;
+
+
+		//Spin to binomial display
+		if(XMLHelpFwdToElem(nodePtr,"binomialdisplay"))
+			return false;
+
+
+		if(!XMLGetAttrib(nodePtr,tmpStr,"freqs"))
+			return false;
+
+		if(!boolStrDec(tmpStr,showBinomialFrequencies))
+			return false;
+		
+		if(!XMLGetAttrib(nodePtr,tmpStr,"normalisedfreqs"))
+			return false;
+		
+		if(!boolStrDec(tmpStr,showNormalisedBinomialFrequencies))
+			return false;
+		
+		if(!XMLGetAttrib(nodePtr,tmpStr,"theoreticfreqs"))
+			return false;
+		
+		if(!boolStrDec(tmpStr,showTheoreticFrequencies))
+			return false;
+
+
+	}
+	else
+		nodePtr=tmpNode;
+
+
+	//FIXME: COMPAT_BREAK : Earlier versions of the state file <= 1441:adaa3a3daa80
 	// do not contain this section, so we must be fault tolerant
 	// when we bin backwards compatability, do this one too.
-	xmlNodePtr tmpNode;
 
 	tmpNode=nodePtr;
 	if(!XMLHelpFwdToElem(nodePtr,"scalarparams"))
 		readScalarsXML(nodePtr,scalarParams);
-	nodePtr=tmpNode;
+	else
+		nodePtr=tmpNode;
+
 	if(!XMLHelpFwdToElem(nodePtr,"vectorparams"))
 		readVectorsXML(nodePtr,vectorParams);
 
@@ -1385,6 +1671,8 @@ size_t SpatialAnalysisFilter::buildSplitPoints(const vector<const FilterStreamDa
 		}
 	}
 
+
+	return 0;
 }
 
 void SpatialAnalysisFilter::filterSelectedRanges(const vector<IonHit> &ions, bool sourceFilter, const RangeFile *rngF,
@@ -1396,9 +1684,9 @@ void SpatialAnalysisFilter::filterSelectedRanges(const vector<IonHit> &ions, boo
 	{
 		for(size_t ui=0;ui<ions.size();ui++)
 		{
-			size_t id;
+			unsigned int id;
 			id=rngF->getIonID(ions[ui].getMassToCharge());
-			if(id == -1)
+			if(id == (unsigned int )-1)
 				continue;
 			if(ionSourceEnabled[id])
 				output.push_back(ions[ui]);
@@ -1408,9 +1696,9 @@ void SpatialAnalysisFilter::filterSelectedRanges(const vector<IonHit> &ions, boo
 	{
 		for(size_t ui=0;ui<ions.size();ui++)
 		{
-			size_t id;
+			unsigned int id;
 			id=rngF->getIonID(ions[ui].getMassToCharge());
-			if(id == -1)
+			if(id == (unsigned int)-1)
 				continue;
 			if(ionTargetEnabled[id])
 				output.push_back(ions[ui]);
@@ -1486,8 +1774,8 @@ size_t SpatialAnalysisFilter::algorithmRDF(ProgressData &progress, bool (*callba
 
 	needSplitting=false;
 	//We only need to split up the data if we have to 
-	if(std::count(ionSourceEnabled.begin(),ionSourceEnabled.end(),true)!=ionSourceEnabled.size()
-		|| std::count(ionTargetEnabled.begin(),ionTargetEnabled.end(),true)!=ionTargetEnabled.size() )
+	if((size_t)std::count(ionSourceEnabled.begin(),ionSourceEnabled.end(),true)!=ionSourceEnabled.size()
+		|| (size_t)std::count(ionTargetEnabled.begin(),ionTargetEnabled.end(),true)!=ionTargetEnabled.size() )
 		needSplitting=true;
 
 	if(haveRangeParent && needSplitting)
@@ -2462,6 +2750,8 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 	progress.filterProgress=0;
 	progress.maxStep=4;
 
+	bool wantAbort=false;
+
 	//Ions inside the selected cylinder,
 	// which are to be used as source points for dist. function query
 	vector<IonHit> ionsInside;
@@ -2478,11 +2768,33 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 			{
 				const IonStreamData* d;
 				d=(const IonStreamData *)dataIn[ui];
-				cropHelp.runFilter(d->data,ionsInside);
+				size_t errCode;
+				errCode=cropHelp.runFilter(d->data,ionsInside);
+			
+				if(errCode == ERR_CROP_INSUFFICIENT_MEM)
+					return INSUFFICIENT_SIZE_ERR;
+				else if(errCode)
+				{
+					//If we fail, abort, but we should use
+					// the appropriate error code
+					ASSERT(errCode == ERR_CROP_CALLBACK_FAIL);
+					wantAbort=true;
+					break;
+				}
 			}
+
+			if(!(*callback)(false))
+			{
+				wantAbort=true;
+				break;
+			}
+		
 		}
 	}
 
+	if(wantAbort)
+		return ABORT_ERR;
+
 	//Now, the ions outside the targeting volume may be reduced 
 	vector<IonHit> ionsOutside;
 	ionsOutside.resize(totalDataSize);
@@ -2536,7 +2848,21 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 					vP,sP);
 
 			vector<IonHit> tmp;
-			cropHelp.runFilter(ionsOutside,tmp);
+			size_t errCode=cropHelp.runFilter(ionsOutside,tmp);
+
+			switch(errCode)
+			{
+				case 0:
+					break;
+				case ERR_CROP_INSUFFICIENT_MEM:
+					return INSUFFICIENT_SIZE_ERR;
+				case ERR_CROP_CALLBACK_FAIL:
+					return ABORT_ERR;
+				default: 
+					ASSERT(false);
+					return ABORT_ERR;
+
+			}
 			tmp.swap(ionsOutside);
 			break;
 		}
@@ -2560,7 +2886,7 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 		#pragma omp task
 		{
 		bool sourceReduce;
-		sourceReduce=(std::count(ionSourceEnabled.begin(),ionSourceEnabled.end(),true)
+		sourceReduce=((size_t)std::count(ionSourceEnabled.begin(),ionSourceEnabled.end(),true)
 						!=ionSourceEnabled.size());
 		if(sourceReduce)
 		{
@@ -2573,7 +2899,7 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 		#pragma omp task
 		{
 		bool targetReduce;
-		targetReduce=(std::count(ionTargetEnabled.begin(),ionTargetEnabled.end(),true)
+		targetReduce=((size_t)std::count(ionTargetEnabled.begin(),ionTargetEnabled.end(),true)
 						!=ionTargetEnabled.size() );
 		if(targetReduce)
 		{
@@ -2611,24 +2937,28 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 
 	float binWidth;
 	//OK, so now we have two datasets that need to be analysed. Lets do it
+	unsigned int errCode;
+
+	bool histOK=false;
 	switch(stopMode)
 	{
 		case STOP_MODE_NEIGHBOUR:
 		{
-			unsigned int errCode;
-
 			Point3D axisNormal=vectorParams[1];
 			axisNormal.normalise();
 
 			errCode=generate1DAxialNNHist(src,tree,axisNormal, histogram,
 					binWidth,nnMax,numBins,&progress.filterProgress,callback);
 
+			//Remap the underlying function code ot that for this function
 			switch(errCode)
 			{
 				case 0:
+					histOK=true;
 					break;
 				case RDF_ERR_INSUFFICIENT_INPUT_POINTS:
 					consoleOutput.push_back(TRANS("Insufficient points to complete analysis"));
+					errCode=0;
 					break;
 				default:
 					ASSERT(false);
@@ -2637,75 +2967,71 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 		}
 		case STOP_MODE_RADIUS:
 		{
-			unsigned int errCode;
-
 			Point3D axisNormal=vectorParams[1];
 			axisNormal.normalise();
 
 			errCode=generate1DAxialDistHist(src,tree,axisNormal, histogram,
 					distMax,numBins,&progress.filterProgress,callback);
 
-			switch(errCode)
-			{
-				case 0:
-					break;
-				case RDF_ABORT_FAIL:
-					return  ABORT_ERR;
-				default:
-					ASSERT(false);
-			}
+			histOK = (errCode !=0);
 			break;
 		}
 		default:
 			ASSERT(false);
 	}
 
+	if(errCode)
+	{
+		delete[] histogram;
+		return errCode;
+	}
 
-	PlotStreamData *plotData = new PlotStreamData;
+	if(histOK)
+	{
+		PlotStreamData *plotData = new PlotStreamData;
 
-	plotData->plotMode=PLOT_MODE_1D;
-	plotData->index=0;
-	plotData->parent=this;
-	plotData->xLabel=TRANS("Axial Distance");
-	plotData->yLabel=TRANS("Count");
-	plotData->dataLabel=getUserString() + TRANS(" 1D Dist. Func.");
+		plotData->plotMode=PLOT_MODE_1D;
+		plotData->index=0;
+		plotData->parent=this;
+		plotData->xLabel=TRANS("Axial Distance");
+		plotData->yLabel=TRANS("Count");
+		plotData->dataLabel=getUserString() + TRANS(" 1D Dist. Func.");
 
-	plotData->r=r;
-	plotData->g=g;
-	plotData->b=b;
-	plotData->xyData.resize(numBins);
+		plotData->r=r;
+		plotData->g=g;
+		plotData->b=b;
+		plotData->xyData.resize(numBins);
 
-	for(unsigned int uj=0;uj<numBins;uj++)
-	{
-		float dist;
-		switch(stopMode)
+		for(unsigned int uj=0;uj<numBins;uj++)
 		{
-			case STOP_MODE_RADIUS:
-				dist = ((float)uj - (float)numBins/2.0f)/(float)numBins*distMax*2.0;
-				break;
-			case STOP_MODE_NEIGHBOUR:
-				dist= (float)uj*binWidth;
-				break;
-			default:
-				ASSERT(false);
+			float dist;
+			switch(stopMode)
+			{
+				case STOP_MODE_RADIUS:
+					dist = ((float)uj - (float)numBins/2.0f)/(float)numBins*distMax*2.0;
+					break;
+				case STOP_MODE_NEIGHBOUR:
+					dist= (float)uj*binWidth;
+					break;
+				default:
+					ASSERT(false);
+			}
+			plotData->xyData[uj] = std::make_pair(dist,
+					histogram[uj]);
 		}
-		plotData->xyData[uj] = std::make_pair(dist,
-				histogram[uj]);
-	}
 
-	delete[] histogram;
-	
-
-	if(cache)
-	{
-		plotData->cached=1;
-		filterOutputs.push_back(plotData);
-		cacheOK=true;
+		if(cache)
+		{
+			plotData->cached=1;
+			filterOutputs.push_back(plotData);
+			cacheOK=true;
+		}
+		else
+			plotData->cached=0;	
+		getOut.push_back(plotData);
 	}
-	else
-		plotData->cached=0;	
-	getOut.push_back(plotData);
 
+	delete[] histogram;
 
 	//Propagate non-ion/range data
 	for(unsigned int ui=0;ui<dataIn.size() ;ui++)
@@ -2736,11 +3062,286 @@ size_t SpatialAnalysisFilter::algorithmAxialDf(ProgressData &progress,
 	return 0;
 }
 
+size_t SpatialAnalysisFilter::algorithmBinomial(ProgressData &progress, 
+		bool (*callback)(bool), size_t totalDataSize, 
+		const vector<const FilterStreamData *>  &dataIn, 
+		vector<const FilterStreamData * > &getOut,const RangeFile *rngF)
+{
+	vector<IonHit> ions;
+
+	progress.step=1;
+	progress.stepName=TRANS("Collate");
+	progress.filterProgress=0;
+	progress.maxStep=2;
+
+	//Merge the ions form the incoming streams
+	Filter::collateIons(dataIn,ions,progress,callback,totalDataSize);
+
+	//Tell user we are on next step
+	progress.step++;
+	progress.stepName=TRANS("Binomial");
+	progress.filterProgress=0;
+	(*callback)(true);
+
+	size_t errCode;
+
+	SEGMENT_OPTION segmentOpts;
+
+	segmentOpts.nIons=numIonsSegment;
+	segmentOpts.strategy=BINOMIAL_SEGMENT_AUTO_BRICK;
+	segmentOpts.extrusionDirection=extrusionDirection;
+	segmentOpts.extrudeMaxRatio=maxBlockAspect;
+
+	vector<GRID_ENTRY> gridEntries;
+
+	vector<size_t> selectedIons;
+
+	for(size_t ui=0;ui<ionSourceEnabled.size();ui++)
+	{
+		if(ionSourceEnabled[ui])
+			selectedIons.push_back(ui);
+	}
+
+
+	errCode=countBinnedIons(ions,rngF,selectedIons,segmentOpts,gridEntries);
+
+	switch(errCode)
+	{
+		case 0:
+			break;
+		case BINOMIAL_NO_MEM:
+			return ERR_BINOMIAL_NO_MEM;
+		default:
+			ASSERT(false);
+			return SPAT_ERR_END_OF_ENUM;
+	}
+
+
+	//If the user wants to see the overlaid grid, show this
+	if(showGridOverlay)
+	{
+		DrawStreamData *draw=new DrawStreamData;
+		draw->parent=this;
+
+		for(size_t ui=0;ui<gridEntries.size();ui++)
+		{
+			DrawRectPrism *dR = new DrawRectPrism;
+
+			dR->setAxisAligned(gridEntries[ui].startPt,
+						gridEntries[ui].endPt);
+			dR->setColour(0.0f,1.0f,0.0f,1.0f);
+			dR->setLineWidth(2);
+
+			draw->drawables.push_back(dR);
+		}
+		
+		draw->cached=1;
+		filterOutputs.push_back(draw);
+
+		getOut.push_back(draw);
+	}
+
+
+	//Vector of ion frequencies in histogram of segment counts, 
+	// each element in vector is for each ion type
+	BINOMIAL_HIST binHist;
+	genBinomialHistogram(gridEntries,selectedIons.size(),binHist);
+
+	//If the histogram is empty, we cannot do any more
+	if(!gridEntries.size())
+		return ERR_BINOMIAL_BIN_FAIL;
+
+	BINOMIAL_STATS binStats;
+	computeBinomialStats(gridEntries,binHist,selectedIons.size(),binStats);
+
+	//Show binomial statistics
+	consoleOutput.push_back(" ------ Binomial statistics ------");
+	string tmpStr;
+	stream_cast(tmpStr,gridEntries.size());
+	consoleOutput.push_back(string("Block count:\t") + tmpStr);
+	consoleOutput.push_back("Name\t\tMean\t\tChiSquare\t\tP_rand\t\tmu");
+	for(size_t ui=0;ui<binStats.mean.size();ui++)
+	{
+		string lineStr;
+		lineStr=rngF->getName(selectedIons[ui]) + std::string("\t\t");
+
+		if(!binStats.pValueOK[ui])
+		{
+			lineStr+="\t\t Not computable ";
+			consoleOutput.push_back(lineStr);
+			continue;
+		}
+		
+		stream_cast(tmpStr,binStats.mean[ui]);
+		lineStr+=tmpStr + string("\t\t");
+
+		stream_cast(tmpStr,binStats.chiSquare[ui]);
+		lineStr+=tmpStr + string("\t\t");
+
+		stream_cast(tmpStr,binStats.pValue[ui]);
+		lineStr+=tmpStr + string("\t\t");
+
+		stream_cast(tmpStr,binStats.comparisonCoeff[ui]);
+		lineStr+=tmpStr ;
+
+		consoleOutput.push_back(lineStr);
+
+	}
+	consoleOutput.push_back(" ---------------------------------");
+
+
+	ASSERT(binHist.mapIonFrequencies.size() ==
+			binHist.normalisedFrequencies.size());
+
+	if(!showBinomialFrequencies)
+		return 0;
+
+
+	for(size_t ui=0;ui<binHist.mapIonFrequencies.size(); ui++)
+	{
+		if(binHist.mapIonFrequencies[ui].empty())
+			continue;
+
+		//Create a plot for this range
+		PlotStreamData* plt;
+		plt = new PlotStreamData;
+		plt->index=ui;
+		plt->parent=this;
+		plt->plotMode=PLOT_MODE_1D;
+		plt->plotStyle=PLOT_TRACE_STEM;
+		plt->xLabel=TRANS("Block size");
+		if(showNormalisedBinomialFrequencies)
+			plt->yLabel=TRANS("Rel. Frequency");
+		else
+			plt->yLabel=TRANS("Count");
+
+		//set the title
+		string ionName;
+		ionName+=rngF->getName(selectedIons[ui]);
+		plt->dataLabel = string("Binomial:") + ionName;
+
+		//Set the colour to match that of the range
+		RGBf colour;	
+		colour=rngF->getColour(selectedIons[ui]);
+				
+		plt->r=colour.red;
+		plt->g=colour.green;
+		plt->b=colour.blue;
+		plt->xyData.resize(binHist.mapIonFrequencies[ui].size());
+
+		size_t offset=0;
+		if(showNormalisedBinomialFrequencies)
+		{
+			for(map<unsigned int, double>::const_iterator it=binHist.normalisedFrequencies[ui].begin();
+					it!=binHist.normalisedFrequencies[ui].end();++it)
+			{
+				plt->xyData[offset]=std::make_pair(it->first,it->second);
+				offset++;
+			}
+		}
+		else
+		{
+			for(map<unsigned int, unsigned int >::const_iterator it=binHist.mapIonFrequencies[ui].begin();
+					it!=binHist.mapIonFrequencies[ui].end();++it)
+			{
+				plt->xyData[offset]=std::make_pair(it->first,it->second);
+				offset++;
+			}
+		}
+
+		if(cache)
+		{
+			plt->cached=1;
+			filterOutputs.push_back(plt);
+			cacheOK=true;
+		}	
+		else
+		{
+			plt->cached=0;
+		}
+
+		getOut.push_back(plt);
+
+	}
+
+	if(!showTheoreticFrequencies)
+		return 0;
+	for(size_t ui=0;ui<binHist.theoreticNormalisedFrequencies.size(); ui++)
+	{
+		if(binHist.theoreticFrequencies[ui].empty())
+			continue;
+
+		//Create a plot for this range
+		PlotStreamData* plt;
+		plt = new PlotStreamData;
+		plt->index=ui + binHist.mapIonFrequencies.size();
+		plt->parent=this;
+		plt->plotMode=PLOT_MODE_1D;
+		plt->plotStyle=PLOT_TRACE_STEM;
+		plt->xLabel=TRANS("Block size");
+		if(showNormalisedBinomialFrequencies)
+			plt->yLabel=TRANS("Rel. Frequency");
+		else
+			plt->yLabel=TRANS("Count");
+
+		//set the title
+		string ionName;
+		ionName+=rngF->getName(selectedIons[ui]);
+		plt->dataLabel = string("Binomial (theory):") + ionName;
+
+		//Set the colour to match that of the range
+		RGBf colour;	
+		colour=rngF->getColour(selectedIons[ui]);
+				
+		plt->r=colour.red;
+		plt->g=colour.green;
+		plt->b=colour.blue;
+		plt->xyData.resize(binHist.theoreticFrequencies[ui].size());
+
+		size_t offset=0;
+		if(showNormalisedBinomialFrequencies)
+		{
+			for(map<unsigned int, double>::const_iterator it=binHist.theoreticNormalisedFrequencies[ui].begin();
+					it!=binHist.theoreticNormalisedFrequencies[ui].end();++it)
+			{
+				plt->xyData[offset]=std::make_pair(it->first,it->second);
+				offset++;
+			}
+		}
+		else
+		{
+			for(map<unsigned int, double >::const_iterator it=binHist.theoreticFrequencies[ui].begin();
+					it!=binHist.theoreticFrequencies[ui].end();++it)
+			{
+				plt->xyData[offset]=std::make_pair(it->first,it->second);
+				offset++;
+			}
+		}
+
+		if(cache)
+		{
+			plt->cached=1;
+			filterOutputs.push_back(plt);
+			cacheOK=true;
+		}	
+		else
+		{
+			plt->cached=0;
+		}
+
+		getOut.push_back(plt);
+
+	}
+	
+	return 0;
+}
+
 #ifdef DEBUG
 
 bool densityPairTest();
 bool nnHistogramTest();
 bool rdfPlotTest();
+bool axialDistTest();
 
 bool SpatialAnalysisFilter::runUnitTests()
 {
@@ -2752,6 +3353,9 @@ bool SpatialAnalysisFilter::runUnitTests()
 
 	if(!rdfPlotTest())
 		return false;
+
+	if(!axialDistTest())
+		return false;
 	
 	return true;
 }
@@ -2935,6 +3539,88 @@ bool rdfPlotTest()
 	return true;
 }
 
+bool axialDistTest()
+{
+	//Build some points to pass to the filter
+	vector<const FilterStreamData*> streamIn,streamOut;
+
+
+	//Create some inptu data
+	//--
+	IonStreamData*d = new IonStreamData;
+	IonHit h;
+	h.setMassToCharge(1);
+
+	//create two points along axis
+	h.setPos(Point3D(0,0,0));
+	d->data.push_back(h);
+
+	h.setPos(Point3D(0.5,0.5,0.5));
+	d->data.push_back(h);
+
+	streamIn.push_back(d);
+	//--
+	
+	
+	//Create a spatial analysis filter
+	SpatialAnalysisFilter *f=new SpatialAnalysisFilter;
+	f->setCaching(false);	
+
+	//Set it to do an axial-dist calculation, 
+	// - NN mode termination,
+	// - Axial mode
+	// - /0 origin, /1 direction, r=1
+	// 
+	//---
+	bool needUp;
+	string s;
+	s=TRANS(SPATIAL_ALGORITHMS[ALGORITHM_AXIAL_DF]);
+	TEST(f->setProperty(KEY_ALGORITHM,s,needUp),"Set prop (algorithm)");
+	
+	s=TRANS(STOP_MODES[STOP_MODE_NEIGHBOUR]);
+	TEST(f->setProperty(KEY_STOPMODE,s,needUp),"Set prop (stopmode)");
+	
+	Point3D originPt(0,0,0), axisPt(1.1,1.1,1.1);
+	float radiusCyl;
+	radiusCyl = 1.0f;
+
+
+	stream_cast(s,originPt);
+	TEST(f->setProperty(KEY_ORIGIN,s,needUp),"Set prop (origin)");
+	
+	stream_cast(s,axisPt);
+	TEST(f->setProperty(KEY_NORMAL,s,needUp),"Set prop (axis)");
+
+	stream_cast(s,radiusCyl);
+	TEST(f->setProperty(KEY_RADIUS,s,needUp),"Set prop (radius)");
+	
+	TEST(f->setProperty(KEY_REMOVAL,"0",needUp),"Set prop (disable surface removal)");
+	//Do the refresh
+	ProgressData p;
+	TEST(!f->refresh(streamIn,streamOut,p,dummyCallback),"Checking refresh code");
+	delete f;
+	//Kill the input ion stream
+	delete d; 
+	streamIn.clear();
+	
+	//1 plot, one set of ions	
+	TEST(streamOut.size() == 2,"stream count");
+
+
+	size_t streamMask=0;
+
+	for(size_t ui=0;ui<streamOut.size();ui++)
+	{
+		streamMask|=streamOut[ui]->getStreamType();
+		delete streamOut[ui];
+	}
+
+
+
+	TEST(streamMask == ( STREAM_TYPE_DRAW | STREAM_TYPE_PLOT) , "Stream type checking");
+
+	return true;
+}
 
 #endif
 
diff --git a/src/backend/filters/spatialAnalysis.h b/src/backend/filters/spatialAnalysis.h
index c32394e..2a5260d 100644
--- a/src/backend/filters/spatialAnalysis.h
+++ b/src/backend/filters/spatialAnalysis.h
@@ -78,6 +78,32 @@ class SpatialAnalysisFilter : public Filter
 		void resetParamsAsNeeded();
 		//-------
 
+		//Binomial specific algorithms
+		//--------
+		//Number of ions to target when segmenting
+		unsigned int numIonsSegment;
+
+		//Maximum aspect ratio permissible for grid entry
+		float maxBlockAspect;
+
+		//The step size in the composition space
+		float binWidth;
+
+		//Direction in which to perform grid extrusion
+		size_t extrusionDirection;
+
+		//Do we show the frequency plot?
+		bool showBinomialFrequencies;
+
+		bool showNormalisedBinomialFrequencies;
+
+		//Do we show the theoretical frequency distributions?
+		bool showTheoreticFrequencies;
+
+		//Do we show the overlaid extruded grid?
+		bool showGridOverlay;
+
+		//--------
 
 
 	
@@ -101,6 +127,10 @@ class SpatialAnalysisFilter : public Filter
 		size_t algorithmAxialDf(ProgressData &progress, bool (*callback)(bool), size_t totalDataSize, 
 			const vector<const FilterStreamData *>  &dataIn, 
 			vector<const FilterStreamData * > &getOut,const RangeFile *rngF);
+		
+		size_t algorithmBinomial(ProgressData &progress, bool (*callback)(bool), size_t totalDataSize, 
+			const vector<const FilterStreamData *>  &dataIn, 
+			vector<const FilterStreamData * > &getOut,const RangeFile *rngF);
 
 		//Create a 3D manipulable cylinder as an output drawable
 		// using the parameters stored inside the vector/scalar params
diff --git a/src/backend/filters/spectrumPlot.cpp b/src/backend/filters/spectrumPlot.cpp
index 1a2a556..34363fc 100644
--- a/src/backend/filters/spectrumPlot.cpp
+++ b/src/backend/filters/spectrumPlot.cpp
@@ -104,8 +104,8 @@ unsigned int SpectrumPlotFilter::refresh(const std::vector<const FilterStreamDat
 	if(cacheOK)
 	{
 		//Only report the spectrum plot
-		for(unsigned int ui=0;ui<filterOutputs.size(); ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateCache(getOut);
+
 		return 0;
 	}
 
diff --git a/src/backend/filters/transform.cpp b/src/backend/filters/transform.cpp
index 053c94f..e494559 100644
--- a/src/backend/filters/transform.cpp
+++ b/src/backend/filters/transform.cpp
@@ -138,8 +138,7 @@ Filter *TransformFilter::cloneUncached() const
 
 size_t TransformFilter::numBytesForCache(size_t nObjects) const
 {
-	//Say we don't know, we are not going to cache anyway.
-	return (size_t)-1;
+	return nObjects*sizeof(IonHit);
 }
 
 DrawStreamData* TransformFilter::makeMarkerSphere(SelectionDevice* &s) const
@@ -173,7 +172,7 @@ DrawStreamData* TransformFilter::makeMarkerSphere(SelectionDevice* &s) const
 		s=new SelectionDevice(this);
 		SelectionBinding b;
 
-		b.setBinding(SELECT_BUTTON_LEFT,FLAG_CMD,DRAW_SPHERE_BIND_ORIGIN,
+		b.setBinding(SELECT_BUTTON_LEFT,0,DRAW_SPHERE_BIND_ORIGIN,
 		             BINDING_SPHERE_ORIGIN,dS->getOrigin(),dS);
 		b.setInteractionMode(BIND_MODE_POINT3D_TRANSLATE);
 		s->addBinding(b);
@@ -187,37 +186,11 @@ DrawStreamData* TransformFilter::makeMarkerSphere(SelectionDevice* &s) const
 unsigned int TransformFilter::refresh(const std::vector<const FilterStreamData *> &dataIn,
 	std::vector<const FilterStreamData *> &getOut, ProgressData &progress, bool (*callback)(bool))
 {
-	//Clear selection devices FIXME: Is this a memory leak???
-	clearDevices();
 	//use the cached copy if we have it.
 	if(cacheOK)
 	{
-		ASSERT(filterOutputs.size());
-		for(unsigned int ui=0;ui<dataIn.size();ui++)
-		{
-			if(dataIn[ui]->getStreamType() != STREAM_TYPE_IONS)
-				getOut.push_back(dataIn[ui]);
-		}
-
-		for(unsigned int ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
-		
-		
-		if(filterOutputs.size() && showPrimitive)
-		{
-			//If the user is using a transform mode that requires origin selection 
-			if(showOrigin && (transformMode == MODE_ROTATE ||
-					transformMode == MODE_SCALE_ANISOTROPIC ||
-					transformMode == MODE_SCALE_ISOTROPIC) )
-			{
-				SelectionDevice *s;
-				getOut.push_back(makeMarkerSphere(s));
-				if(s)
-					devices.push_back(s);
-			}
-			
-		}
-
+		propagateStreams(dataIn,getOut, STREAM_TYPE_IONS,false);
+		propagateCache(getOut);
 		return 0;
 	}
 
@@ -296,15 +269,39 @@ unsigned int TransformFilter::refresh(const std::vector<const FilterStreamData *
 			transformMode == MODE_SCALE_ISOTROPIC) )
 	{
 		SelectionDevice *s;
-		getOut.push_back(makeMarkerSphere(s));
+		DrawStreamData *d=makeMarkerSphere(s);
 		if(s)
 			devices.push_back(s);
+		if(cache)
+		{
+			d->cached=1;
+			filterOutputs.push_back(d);
+		}
+		else
+			d->cached=0;
+		
+		getOut.push_back(d);
 	}
 			
 	//Apply the transformations to the incoming 
 	//ion streams, generating new outgoing ion streams with
 	//the modified positions
 	size_t totalSize=numElements(dataIn);
+
+	//If there are no ions, nothing to do.
+	// just copy non-ion input to output 
+	if(!totalSize)
+	{
+		for(unsigned int ui=0;ui<dataIn.size();ui++)
+		{
+			if(dataIn[ui]->getStreamType() == STREAM_TYPE_IONS)
+				continue;
+
+			getOut.push_back(dataIn[ui]);
+		}
+		return 0;
+	}
+
 	if( transformMode != MODE_VALUE_SHUFFLE)
 	{
 		//Dont cross the streams. Why? It would be bad.
@@ -1395,7 +1392,7 @@ bool TransformFilter::setProperty(  unsigned int key,
 				if(value == TRANS(TRANSFORM_MODE_STRING[ui]))
 					tmp=ui;
 			}
-			if(tmp==-1)
+			if(tmp==(size_t)-1)
 			{
 				ASSERT(false); // This should not happen
 				return false;
@@ -1655,7 +1652,7 @@ bool TransformFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 		return false;
 	//====
 	
-	//Retreive vector parameters
+	//Retrieve vector parameters
 	//===
 	if(XMLHelpFwdToElem(nodePtr,"vectorparams"))
 		return false;
@@ -1666,7 +1663,7 @@ bool TransformFilter::readState(xmlNodePtr &nodePtr, const std::string &stateFil
 	//===	
 
 	nodePtr=tmpNode;
-	//Retreive scalar parameters
+	//Retrieve scalar parameters
 	//===
 	if(XMLHelpFwdToElem(nodePtr,"scalarparams"))
 		return false;
@@ -2041,7 +2038,6 @@ bool scaleTest()
 	//---
 
 
-	//OK, so now do the rotation
 	//Do the refresh
 	ProgressData p;
 	TEST(!f->refresh(streamIn,streamOut,p,dummyCallback),"refresh error code");
@@ -2115,7 +2111,6 @@ bool scaleAnisoTest()
 	//---
 
 
-	//OK, so now do the rotation
 	//Do the refresh
 	ProgressData p;
 	TEST(!f->refresh(streamIn,streamOut,p,dummyCallback),"refresh error code");
diff --git a/src/backend/filters/voxelise.cpp b/src/backend/filters/voxelise.cpp
index 5f990a6..88e55f6 100644
--- a/src/backend/filters/voxelise.cpp
+++ b/src/backend/filters/voxelise.cpp
@@ -201,7 +201,7 @@ VoxeliseFilter::VoxeliseFilter()
 	colourMapBounds[1]=1;
 
 
-	//Ficticious bounds.
+	//Fictitious bounds.
 	bc.setBounds(Point3D(0,0,0),Point3D(1,1,1));
 
 	for (unsigned int i = 0; i < INDEX_LENGTH; i++) 
@@ -244,7 +244,6 @@ Filter *VoxeliseFilter::cloneUncached() const
 	p->gaussDev=gaussDev;
 
 	p->representation=representation;
-	p->splatSize=splatSize;
 
 	p->normaliseType=normaliseType;
 	p->numeratorAll=numeratorAll;
@@ -384,18 +383,13 @@ void VoxeliseFilter::initFilter(const std::vector<const FilterStreamData *> &dat
 unsigned int VoxeliseFilter::refresh(const std::vector<const FilterStreamData *> &dataIn,
 		  std::vector<const FilterStreamData *> &getOut, ProgressData &progress, bool (*callback)(bool))
 {
-	for(size_t ui=0;ui<dataIn.size();ui++)
-	{
-		//Disallow copying of anything in the blockmask. Copy everything else
-		if(!(dataIn[ui]->getStreamType() & getRefreshBlockMask() ))
-			getOut.push_back(dataIn[ui]);
-	}
+	//Disallow copying of anything in the blockmask. Copy everything else
+	propagateStreams(dataIn,getOut,getRefreshBlockMask(),true);
 	
 	//use the cached copy if we have it.
 	if(cacheOK)
 	{
-		for(size_t ui=0;ui<filterOutputs.size();ui++)
-			getOut.push_back(filterOutputs[ui]);
+		propagateCache(getOut);
 		return 0;
 	}
 
@@ -569,13 +563,19 @@ unsigned int VoxeliseFilter::refresh(const std::vector<const FilterStreamData *>
 				float sum;
 				sum=kernel.getSum();
 				kernel/=sum;
+
+				cerr << "Kernel (min/max):" << kernel.min() << "," << kernel.max() << endl;
 			
 				if(res.resize(voxelData))
 					return VOXELISE_MEMORY_ERR; 
+				
 
+				cerr << "Data:" << voxelData.min() << "," << voxelData.max() << endl;
 				//Gaussian kernel is separable (rank 1)
-				if(voxelData.separableConvolve(kernel,res,modeMap[filterBoundaryMode]))
+				if(voxelData.convolve(kernel,res,BOUND_MIRROR))
 					return VOXELISE_CONVOLVE_ERR;
+				
+				cerr << "Result (min/max):" << res.min() << "," << res.max() << endl;
 
 				voxelData.swap(res);
 
@@ -907,7 +907,7 @@ void VoxeliseFilter::getProperties(FilterPropGroup &propertyList) const
 	//TODO: Other filtering? threshold/median? laplacian? etc
 	
 	choices.clear();
-
+/*
 	//Post-filtering method
 	for(unsigned int ui=0;ui<VOXELISE_FILTERTYPE_MAX; ui++)
 	{
@@ -952,7 +952,7 @@ void VoxeliseFilter::getProperties(FilterPropGroup &propertyList) const
 		propertyList.addProperty(p,curGroup);
 	}
 	propertyList.setGroupTitle(curGroup,TRANS("Filtering"));
-	curGroup++;
+	curGroup++;*/
 	//----
 
 	//start a new group for the visual representation
@@ -1000,7 +1000,7 @@ void VoxeliseFilter::getProperties(FilterPropGroup &propertyList) const
 		}
 		case VOXEL_REPRESENT_ISOSURF:
 		{
-			//-- Isosurface paramters --
+			//-- Isosurface parameters --
 			propertyList.setGroupTitle(curGroup,TRANS("Surf. param."));
 
 			stream_cast(tmpStr,isoLevel);
@@ -2071,7 +2071,7 @@ void VoxeliseFilter::getTexturedSlice(const Voxels<float> &v,
 		for(size_t uj=0;uj<dim[1];uj++)
 		{
 			colourMapWrap(colourMap,rgb, data[ui*dim[1] + uj],
-					minV,maxV);
+					minV,maxV,false);
 			
 			texQ.setData(ui,uj,rgb);	
 		}
diff --git a/src/backend/filtertree.cpp b/src/backend/filtertree.cpp
index 66e5583..1993418 100644
--- a/src/backend/filtertree.cpp
+++ b/src/backend/filtertree.cpp
@@ -33,6 +33,8 @@ enum
 };
 
 
+
+
 //Simple garbage collector for FilterTree::refresh
 // does not have to be efficient, as it is assumed that this is not a bottleneck
 class FilterRefreshCollector
@@ -239,16 +241,23 @@ void FilterTree::swap(FilterTree &other)
 
 const FilterTree &FilterTree::operator=(const FilterTree &orig)
 {
+	clear();
+
 	cacheStrategy=orig.cacheStrategy;
 	maxCachePercent=orig.maxCachePercent;
 
+	//Make a duplicate of the filter pointers from the other tree
+	// we will overwrite them in a second
 	filters=orig.filters;
 
 	//Don't grab a direct copy of the tree, but rather an cloned duplicate,
-	// without the internal cache data
+	// without the internal cache data.
+	// No need to free here, as the orig tree still has the pointers
 	for(tree<Filter *>::pre_order_iterator it=filters.begin();
 		it!=filters.end();++it)
+	{
 		(*it)=(*it)->cloneUncached();
+	}
 
 	return *this;
 }
@@ -328,7 +337,7 @@ void FilterTree::getAccumulatedPropagationMaps(map<Filter*, size_t> &emitTypes,
 	//Build the  emit type map. This describes
 	//what possible types can be emitted at any point in the tree.
 	for(tree<Filter *>::iterator it=filters.begin_breadth_first();
-	it!=filters.end_breadth_first(); ++it)
+					it!=filters.end_breadth_first(); ++it)
 	{
 		//FIXME: HACK -- why does the BFS not terminate correctly?
 		if(!filters.is_valid(it))
@@ -360,6 +369,8 @@ void FilterTree::getAccumulatedPropagationMaps(map<Filter*, size_t> &emitTypes,
 	//Build the accumulated block map;  this describes
 	//what types, if emitted, will NOT be propagated to the final output
 	//Nor affect any downstream filters
+
+	//TODO: Why not implement as  a reverse BFS?? Would be more efficient...
 	for(size_t ui=filters.max_depth()+1; ui; )
 	{
 		ui--;
@@ -448,6 +459,11 @@ void FilterTree::getFilterRefreshStarts(vector<tree<Filter *>::iterator > &propS
 		vector<tree<Filter *>::iterator > seedFilts;
 
 
+		//BUild a filter->iterator mapping
+		map<Filter *,tree<Filter *>::iterator > leafMap;
+		for(tree<Filter*>::leaf_iterator  it=filters.begin_leaf();
+				it!=filters.end_leaf(); ++it)
+			leafMap[*it]=it;
 
 
 		for(tree<Filter *>::iterator it=filters.begin_breadth_first();
@@ -460,6 +476,8 @@ void FilterTree::getFilterRefreshStarts(vector<tree<Filter *>::iterator > &propS
 			//Check to see if we have an insertion point above us.
 			//if so, we cannot press on, as we have determined that
 			//we must start higher up.
+			// (TODO : Just terminate child enumeration for BFS 
+			// for seed filter iterators, instead of this hack-ish method
 			bool isChildFilt;
 			isChildFilt=false;
 			for(unsigned int ui=0; ui<seedFilts.size(); ui++)
@@ -474,24 +492,15 @@ void FilterTree::getFilterRefreshStarts(vector<tree<Filter *>::iterator > &propS
 			if(isChildFilt)
 				continue;
 
-			//If we are a leaf, then we have to do our work, or nothing will be generated
+			//If we are a leaf, and not a child of a seed,
+			//then we have to do our work, or nothing will be generated
 			//so check that
-			bool isLeaf;
-			isLeaf=false;
-			for(tree<Filter*>::leaf_iterator  itJ= filters.begin_leaf();
-			itJ!=filters.end_leaf(); ++itJ)
-
+			if(leafMap.find(*it) != leafMap.end())
 			{
-				if(itJ == it)
-				{
-					isLeaf=true;
-					seedFilts.push_back(it);
-					break;
-				}
+				seedFilts.push_back(it);
+				continue;
 			}
 
-			if(isLeaf)
-				continue;
 
 			//Check to see if we can use these children as insertion
 			//points in the tree
@@ -582,11 +591,15 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 	//size to be non-zero)
 	inDataStack.push(curData);
 
+
+	std::set<Filter*> leafFilters;
+	for(tree<Filter*>::leaf_iterator  it=filters.begin_leaf();
+			it!=filters.end_leaf(); ++it)
+		leafFilters.insert(*it);
 	
-	//Keep redoing the refresh until the user stops fiddling with the filter tree.
 
+	//Keep redoing the refresh until the user stops fiddling with the filter tree.
 	vector<tree<Filter *>::iterator> baseTreeNodes;
-
 	baseTreeNodes.clear();
 
 	//Find the minimal starting locations for the refresh - eg. we can skip certain filters
@@ -614,6 +627,8 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 				!isChild(filters,baseTreeNodes[itPos],filtIt))
 				continue;
 
+			Filter *currentFilter;
+			currentFilter=*filtIt;
 
 			//Step 0 : Pop the cache until we reach our current level, 
 			//	delete any pointers that would otherwise be lost.
@@ -629,17 +644,19 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 			//Step 1: Set up the progress system
 			//---
 			curProg.clock();
-			curProg.curFilter=*filtIt;	
+			curProg.curFilter=currentFilter;	
 			//---
-			
+		
+		
+
 			//Step 2: Check if we should cache this filter or not.
 			//Get the number of bytes that the filter expects to use
 			//---
 			unsigned long long cacheBytes;
 			if(inDataStack.empty())
-				cacheBytes=(*filtIt)->numBytesForCache(0);
+				cacheBytes=currentFilter->numBytesForCache(0);
 			else
-				cacheBytes=(*filtIt)->numBytesForCache(numElements(inDataStack.top()));
+				cacheBytes=currentFilter->numBytesForCache(numElements(inDataStack.top()));
 
 			if(cacheBytes != (unsigned long long)(-1))
 			{
@@ -648,16 +665,16 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 				switch(cacheStrategy)
 				{
 					case CACHE_NEVER:
-						(*filtIt)->setCaching(false);
+						currentFilter->setCaching(false);
 						break;
 					case CACHE_DEPTH_FIRST:
-						(*filtIt)->setCaching(cacheBytes/(1024*1024) < maxCachePercent*getAvailRAM());
+						currentFilter->setCaching(cacheBytes/(1024*1024) < maxCachePercent*getAvailRAM());
 						break;
 
 				}
 			}
 			else
-				(*filtIt)->setCaching(false);
+				currentFilter->setCaching(false);
 
 			//---
 
@@ -669,14 +686,29 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 			//
 			(*callback)(false);
 
+			if(!currentFilter->haveCache())
+				currentFilter->clearConsole();
 
 			//Take the stack top, filter it and generate "curData"
-			errCode=(*filtIt)->refresh(inDataStack.top(),
-						curData,curProg,callback);
+			try
+			{
+
+				errCode=currentFilter->refresh(inDataStack.top(),
+							curData,curProg,callback);
+
+				//error codes above this value are reserved
+				ASSERT(errCode <=FILTERTREE_REFRESH_ERR_BEGIN);
+			}
+			catch(std::bad_alloc)
+			{
+				//Should catch bad mem cases in filter, wherever possible
+				WARN(false,"Memory exhausted during refresh");
+				errCode=FILTERTREE_REFRESH_ERR_MEM;
+			}
 
 #ifdef DEBUG
 			//Perform sanity checks on filter output
-			checkRefreshValidity(curData,*filtIt);
+			checkRefreshValidity(curData,currentFilter);
 			ASSERT(curProg.step == curProg.maxStep || errCode);
 #endif
 			//Ensure that (1) yield is called, regardless of what filter does
@@ -687,7 +719,7 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 
 			vector<SelectionDevice *> curDevices;
 			//Retrieve the user interaction "devices", and send them to the scene
-			(*filtIt)->getSelectionDevices(curDevices);
+			currentFilter->getSelectionDevices(curDevices);
 
 			//Add them to the total list of devices
 			for(size_t ui=0;ui<curDevices.size();ui++)
@@ -697,11 +729,11 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 
 			//Retrieve any console messages from the filter
 			vector<string> tmpMessages;
-			(*filtIt)->getConsoleStrings(tmpMessages);
+			currentFilter->getConsoleStrings(tmpMessages);
 			//Accumulate the messages
 			consoleMessages.reserve(consoleMessages.size()+tmpMessages.size());
 			for(size_t ui=0;ui<tmpMessages.size();ui++)
-				consoleMessages.push_back(make_pair(*filtIt,tmpMessages[ui]));
+				consoleMessages.push_back(make_pair(currentFilter,tmpMessages[ui]));
 
 			//check for any error in filter update (including user abort)
 			if(errCode)
@@ -728,44 +760,29 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 
 
 			//Update the filter output statistics, eg num objects of each type output 
-			(*filtIt)->updateOutputInfo(curData);
+			currentFilter->updateOutputInfo(curData);
+			
 			
 			
-			//is this node a leaf of the tree?
-			bool isLeaf;
-			isLeaf=false;
-			for(tree<Filter *>::leaf_iterator leafIt=filters.begin_leaf();
-					leafIt!=filters.end_leaf(); ++leafIt)
+			//If this is not a leaf, keep track of intermediary pointers
+			if(leafFilters.find(currentFilter)== leafFilters.end())
 			{
-				if(*leafIt == *filtIt)
-				{
-					isLeaf=true;
-					break;
-				}
+				//The filter will generate a list of new pointers. If any out-going data 
+				//streams are un-cached, track them
+				refreshCollector.trackPointers(curData);
+				
+				//Put this in the intermediary stack, 
+				//so it is available for any other children at this leve.
+				inDataStack.push(curData);
 			}
-	
-			if(curData.size())
+			else if(curData.size())
 			{
-				//If this is not a leaf, keep track of intermediary pointers
-				if(!isLeaf)
-				{
-					//The filter will generate a list of new pointers. If any out-going data 
-					//streams are un-cached, track them
-					refreshCollector.trackPointers(curData);
-					
-					//Put this in the intermediary stack, 
-					//so it is available for any other children at this leve.
-					inDataStack.push(curData);
-				}
-				else
-				{
-					//The filter has created an output. Record it for passing to updateScene
-					outData.push_back(make_pair(*filtIt,curData));
-					refreshCollector.forgetPointers(curData);
-				}	
-				//Cur data is recorded either in outDta or on the data stack
-				curData.clear();
-			}
+				//The filter has created an output. Record it for passing to updateScene
+				outData.push_back(make_pair(currentFilter,curData));
+				refreshCollector.forgetPointers(curData);
+			}	
+			//Cur data is recorded either in outDta or on the data stack
+			curData.clear();
 			//---
 			
 		}
@@ -820,6 +837,18 @@ unsigned int FilterTree::refreshFilterTree(list<FILTER_OUTPUT_DATA > &outData,
 	return 0;
 }
 
+string FilterTree::getRefreshErrString(unsigned int code)
+{
+	ASSERT(code >FILTERTREE_REFRESH_ERR_BEGIN && code < FILTERTREE_REFRESH_ERR_ENUM_END);
+	const char *REFRESH_ERR_STRINGS[] = {"",
+		"Insufficient memory for refresh",
+		};
+	
+	unsigned int delta=code-FILTERTREE_REFRESH_ERR_BEGIN;
+
+	return string(REFRESH_ERR_STRINGS[delta]);
+}
+
 bool FilterTree::setFilterProperty(Filter *targetFilter, unsigned int key,
 				const std::string &value, bool &needUpdate)
 {
@@ -1167,16 +1196,7 @@ void FilterTree::checkRefreshValidity(const vector< const FilterStreamData *> &c
 	//Filter outputs should have a parent that exists somewhere in the tree
 	for(size_t ui=0;ui<curData.size();ui++)
 	{
-		bool found;
-		found=false;
-		for(tree<Filter * >::iterator it=filters.begin(); 
-							it!=filters.end(); ++it)
-		{
-			if(*it == curData[ui]->parent)
-				found=true;
-		}
-
-		ASSERT(found);
+		ASSERT(contains(curData[ui]->parent));
 	}
 
 	//Filter outputs should
@@ -1191,12 +1211,17 @@ void FilterTree::checkRefreshValidity(const vector< const FilterStreamData *> &c
 
 
 	//Filter outputs should
+	//	- only use valid stream types
 	//	- Not contain zero sized point streams
 	for(size_t ui=0; ui<curData.size(); ui++)
 	{
 		const FilterStreamData *f;
 		f=(curData[ui]);
 
+		//No stream type mask bits, other than valid stream types,  should be set
+		ASSERT( (f->getStreamType() & ~( STREAMTYPE_MASK_ALL)) == 0);
+
+
 		switch(f->getStreamType())
 		{
 			case STREAM_TYPE_IONS:
@@ -1303,10 +1328,11 @@ void FilterTree::checkRefreshValidity(const vector< const FilterStreamData *> &c
 				{
 					ASSERT(devices[uk]->getNumBindings());
 				}
+				
+				//Drawables with selection devices cannot be cached
+				ASSERT(!p->cached);
 			}
 		
-			//Drawables with selection devices cannot be cached
-			ASSERT(!p->cached);
 		}
 
 	}
@@ -1324,73 +1350,20 @@ void FilterTree::safeDeleteFilterList( std::list<FILTER_OUTPUT_DATA> &outData,
 		//Note the No-op at the loop iterator. this is needed so we can safely .erase()
 		for(size_t ui=0;ui<it->second.size();ui++)
 		{
+			const FilterStreamData* f;
+			f= it->second[ui];
 			//Don't operate on streams if we have a nonzero mask, and the (mask is active XOR mask mode)
 			//NOTE: the XOR flips the action of the mask. if maskprevents is true, then this logical switch
 			//prevents the masked item from being deleted. If not, ONLY the masked types are deleted.
 			//In any case, a zero mask makes this whole thing not do anything, and everything gets deleted.
-			if(typeMask && ( ((bool)(it->second[ui]->getStreamType() & typeMask)) ^ !maskPrevents)) 
+			if(typeMask && ( ((bool)(f->getStreamType() & typeMask)) ^ !maskPrevents)) 
 				continue;
 			
-			switch(it->second[ui]->getStreamType())
-			{
-				case STREAM_TYPE_IONS:
-				{
-					//Iterator points to vector. Typecast elements in vector to IonStreamData 
-					const IonStreamData *ionData;
-					ionData=((const IonStreamData *)(it->second[ui]));
-					
-					ASSERT(ionData->cached == 1 ||
-						ionData->cached == 0);
-
-					if(!ionData->cached)
-						delete ionData;
-					break;
-				}
-				case STREAM_TYPE_PLOT:
-				{
-					const PlotStreamData *plotData;
-					plotData=((PlotStreamData *)it->second[ui]);
-
-					ASSERT(plotData->cached == 1 ||
-						plotData->cached == 0);
-					if(!plotData->cached)
-						delete plotData;
-					
-					break;
-				}
-				case STREAM_TYPE_DRAW:
-				{
-					DrawStreamData *drawData;
-					drawData=((DrawStreamData *)it->second[ui]);
-					
-					ASSERT(drawData->cached == 1 ||
-						drawData->cached == 0);
-					if(drawData->cached)
-						delete drawData;
-					break;
-				}
-				case STREAM_TYPE_RANGE:
-					//Range data has no allocated pointer
-					break;
-				case STREAM_TYPE_VOXEL:
-				{
-					//Iterator points to vector. Typecast elements in vector to VoxelStreamData 
-					const VoxelStreamData *voxelData;
-					voxelData=((const VoxelStreamData *)(it->second[ui]));
-					
-					ASSERT(voxelData->cached == 1 ||
-						voxelData->cached == 0);
-
-					if(!voxelData->cached)
-						delete voxelData;
-					break;
-				}
-				default:
-					ASSERT(false);
-			}
-		
+			//Output data is uncached - delete it
+			if(!f->cached)
+				delete f;
 	
-			std::swap((it->second[ui]),it->second.back());
+			std::swap(f,it->second.back());
 			it->second.pop_back();
 		}
 
@@ -1485,7 +1458,7 @@ void FilterTree::addFilterTree(FilterTree &f, const Filter *parent)
 
 bool FilterTree::copyFilter(Filter *toCopy,const Filter *newParent)
 {
-	//Copy a filter child to a filter child
+	//Copy a filter child to a different filter child
 	if(newParent)
 	{
 
@@ -1493,65 +1466,41 @@ bool FilterTree::copyFilter(Filter *toCopy,const Filter *newParent)
 			!(toCopy==newParent));
 
 		//Look for both newparent and sibling iterators	
-		bool found[2] = {false,false};
 		tree<Filter *>::iterator moveFilterIt,parenterIt;
-		for(tree<Filter * >::iterator it=filters.begin(); 
-							it!=filters.end(); ++it)
-		{
-			if(!found[0])
-			{
-				if(*it == toCopy)
-				{
-					moveFilterIt=it;
-					found[0]=true;
-				}
-			}
-			if(!found[1])
-			{
-				if(*it == newParent)
-				{
-					parenterIt=it;
-					found[1]=true;
-				}
-			}
-
-			if(found[0] && found[1] )
-				break;
-		}
+		moveFilterIt=std::find(filters.begin(),filters.end(),toCopy);
+		parenterIt=std::find(filters.begin(),filters.end(),newParent);
 		
-		ASSERT(found[0] && found[1] );
+		ASSERT(moveFilterIt !=filters.end() &&
+			parenterIt != filters.end());
 
-		//ensure that this is actually a parent-child relationship
-		for(tree<Filter *>::pre_order_iterator it(moveFilterIt);it!= filters.end(); ++it)
-		{
-			//Do not traverse siblings
-			if(filters.depth(moveFilterIt) >= filters.depth(it) && it!=moveFilterIt )
-				break;
-			
-			if(it == parenterIt)
-				return false;
-		}
+		if(parenterIt == moveFilterIt)
+			return false;
+
+
+
+
+		//ensure that we are not trying to move a parent filter to one
+		// of its children
+		if(isChild(filters,moveFilterIt,parenterIt))
+			return false;
 		
 		//Move the "tomove" filter, and its children to be a child of the
 		//newly nominated parent (DoCS* "adoption" you might say.) 
 		//*DoCs : Department of Child Services (bad taste .au joke)
-		if(parenterIt != moveFilterIt)
-		{
-			//Create a temporary tree and copy the contents into here
-			tree<Filter *> tmpTree;
-			tree<Filter *>::iterator node= tmpTree.insert(tmpTree.begin(),0);
-			tmpTree.replace(node,moveFilterIt); //Note this doesn't kill the original
-			
-			//Replace each of the filters in the temporary_tree with a clone of the original
-			for(tree<Filter*>::iterator it=tmpTree.begin();it!=tmpTree.end(); ++it)
-				*it= (*it)->cloneUncached();
+		//Create a temporary tree and copy the contents into here
+		tree<Filter *> tmpTree;
+		tree<Filter *>::iterator node= tmpTree.insert(tmpTree.begin(),0);
+		tmpTree.replace(node,moveFilterIt); //Note this doesn't kill the original
+		
+		//Replace each of the filters in the temporary_tree with a clone of the original
+		for(tree<Filter*>::iterator it=tmpTree.begin();it!=tmpTree.end(); ++it)
+			*it= (*it)->cloneUncached();
 
-			//In the original tree, create a new null node
-			node = filters.append_child(parenterIt,0);
-			//Replace the node with the tmpTree's contents
-			filters.replace(node,tmpTree.begin()); 
+		//In the original tree, create a new null node
+		node = filters.append_child(parenterIt,0);
+		//Replace the node with the tmpTree's contents
+		filters.replace(node,tmpTree.begin()); 
 
-		}
 		
 		initFilterTree();
 		return parenterIt != moveFilterIt;
@@ -1685,16 +1634,7 @@ bool FilterTree::reparentFilter(Filter *f, const Filter *newParent)
 	//If we are moving to the base, then that is a special case.
 	if(!newParent)
 	{
-		for(tree<Filter * >::iterator it=filters.begin(); 
-							it!=filters.end(); ++it)
-		{
-			if(*it == f)
-			{
-				moveFilterIt=it;
-				break;
-			}
-		}
-
+		moveFilterIt=std::find(filters.begin(),filters.end(),f);
 	}
 	else
 	{
@@ -1835,3 +1775,28 @@ void FilterTree::clearCacheByType(unsigned int type)
 	}
 
 }
+
+
+		
+void FilterTree::modifyRangeFiles(const map<const RangeFile *, const RangeFile *> &toModify)
+{
+	for(tree<Filter *>::iterator it=filters.begin();it!=filters.end();++it)
+	{
+		//TODO: refactor to introduce filter->hasRange () ? 
+		if((*it)->getType() != FILTER_TYPE_RANGEFILE)
+			continue;
+
+		RangeFileFilter *rngFilt=(RangeFileFilter* )(*it);
+
+		const RangeFile *r = &(rngFilt->getRange());
+		if( toModify.find(r) == toModify.end() )
+			continue;
+		
+		const RangeFile *modRng =toModify.at(r);
+		rngFilt->setRangeData(*modRng);
+
+		//Erase all downstream objects' caches
+		clearCache(rngFilt,true);
+	}
+
+}
diff --git a/src/backend/filtertree.h b/src/backend/filtertree.h
index 5fc724e..41159e3 100644
--- a/src/backend/filtertree.h
+++ b/src/backend/filtertree.h
@@ -27,6 +27,20 @@
 
 typedef std::pair<Filter *,vector<const FilterStreamData * > > FILTER_OUTPUT_DATA;
 
+
+
+//Generic filter tree refresh error codes
+enum
+{
+	FILTERTREE_REFRESH_ERR_BEGIN=100000,
+	FILTERTREE_REFRESH_ERR_MEM,
+	FILTERTREE_REFRESH_ERR_ENUM_END
+};
+
+
+
+//!Tree of filters, which link together to perform an analysis
+// this class allows for manupulating and execution of filters
 class FilterTree
 {
 	private:
@@ -113,12 +127,19 @@ class FilterTree
 			std::list<FILTER_OUTPUT_DATA> &outData,
 			std::vector<SelectionDevice *> &devices,std::vector<std::pair<const Filter *,string> > &consoleMessages,
 						ProgressData &curProg, bool (*callback)(bool)) const;
+
+		static string getRefreshErrString(unsigned int errCode);
 		
 		//!Safely delete data generated by refreshFilterTree(...). 
 		//a mask can be used to *prevent* STREAM_TYPE_blah from being deleted. Deleted items are removed from the list.
 		void safeDeleteFilterList(std::list<FILTER_OUTPUT_DATA> &outData, 
 								size_t typeMask=STREAMTYPE_MASK_ALL, bool maskPrevents=false) const;
 
+		//!compute the integrated (accumulated) propagation maps for emission and blocking.
+		// For emission this value gives the possible types that
+		//  can be emitted from each filter. It is not possible to
+		//  emit types not in the mask
+		// For blocking, give the types that cannot reach the tree output (leaf exit)
 		void getAccumulatedPropagationMaps(map<Filter*, size_t> &emitTypes, map<Filter*,size_t> &blockTypes) const;
 		//---
 
@@ -169,7 +190,7 @@ class FilterTree
 		//	and all their children.
 		void clearCacheByType(unsigned int type);
 		
-		//!Return all of a given type of filter from the filter tree
+		//!Return all of a given type of filter from the filter tree. Type must be the exact type of filter - it is not a mask
 		void getFiltersByType(std::vector<const Filter *> &filters, unsigned int type) const;
 		
 		//!Make the filter system safe (non-hazardous)
@@ -197,6 +218,10 @@ class FilterTree
 		//---------	
 		
 		void setCachePercent(unsigned int newCache);
+		
+		//Overwrite the contents of the pointed-to range files with
+		// the map contents
+		void modifyRangeFiles(const map<const RangeFile *, const RangeFile *> &toModify);
 };
 
 #endif
diff --git a/src/backend/plot.cpp b/src/backend/plot.cpp
index 6ca21ac..017878c 100644
--- a/src/backend/plot.cpp
+++ b/src/backend/plot.cpp
@@ -276,10 +276,11 @@ void genErrBars(const std::vector<float> &x, const std::vector<float> &y,
 				//Compute the local mean
 				for(int uj=0;uj<(int)errMode.movingAverageNum;uj++)
 				{
+					//TODO: Why are we using (int) here?
 					int idx;
 					idx= std::max(ui+uj-(int)errMode.movingAverageNum/2,0);
 					idx=std::min(idx,(int)(y.size()-1));
-					ASSERT(idx<y.size());
+					ASSERT(idx<(int)y.size());
 					mean+=y[idx];
 				}
 
@@ -306,14 +307,153 @@ void genErrBars(const std::vector<float> &x, const std::vector<float> &y,
 }
 //===
 
-		//!Constructor
+PlotRegion::PlotRegion()
+{
+	accessMode=ACCESS_MODE_ENUM_END;
+	parentObject=0;
+}
+
+PlotRegion::PlotRegion(size_t updateAccessMode,void *parentObj)
+{
+	setUpdateMethod(updateAccessMode,parentObj);
+}
+
+void PlotRegion::setUpdateMethod(size_t updateAccessMode,void *parentObj)
+{
+	ASSERT(updateAccessMode< ACCESS_MODE_ENUM_END);
+	ASSERT(parentObj);
+	
+	parentObject=parentObj;
+	accessMode=updateAccessMode;
+}
+
+const PlotRegion &PlotRegion::operator=(const PlotRegion &oth)
+{
+	accessMode=oth.accessMode;
+	parentObject=oth.parentObject;
+	id=oth.id;
+
+	r=oth.r; g=oth.g; b=oth.b;
+	bounds=oth.bounds;
+
+	return *this;
+}
+
+void PlotRegion::updateParent(size_t regionChangeType,
+		const vector<float> &newPositions, bool updateSelf) 
+{
+	ASSERT(newPositions.size() >= bounds.size());
+	ASSERT(parentObject);
+
+	//Update the parent object, using the requested access mode for the parent
+	switch(accessMode)
+	{
+		case ACCESS_MODE_FILTER:
+		{
+			Filter *f;
+			f = (Filter*)parentObject;
+			f->setPropFromRegion(regionChangeType,id,newPositions[0]);
+
+			break;
+		}
+		case ACCESS_MODE_RANGEFILE:
+		{
+			RangeFile *rng= (RangeFile *) parentObject;
+			switch(regionChangeType)
+			{
+				case REGION_MOVE_EXTEND_XMINUS:
+				{
+					//Disallow zero sided region
+					if(rng->getRangeByRef(id).second ==newPositions[0])
+						break;
+					
+					rng->getRangeByRef(id).first=newPositions[0];
+					break;
+				}
+				case REGION_MOVE_EXTEND_XPLUS:
+				{
+					//Disallow zero sided region
+					if(rng->getRangeByRef(id).first==newPositions[0])
+						break;
+
+					rng->getRangeByRef(id).second=newPositions[0];
+					break;
+				}
+				//move the centroid to the new absolute position
+				case REGION_MOVE_TRANSLATE_X:
+				{
+					float delta;
+					pair<float,float> &bound=rng->getRangeByRef(id);
+
+					delta = (bound.second-bound.first)/2;
+					bound.first=newPositions[0]-delta;
+					bound.second=newPositions[0]+delta;
+					break;
+				}
+				default:
+					ASSERT(false);
+			}
+			
+			//Check for inversion
+			if(rng->getRangeByRef(id).first  > rng->getRangeByRef(id).second)
+			{
+				std::swap(rng->getRangeByRef(id).first,
+					rng->getRangeByRef(id).second);
+			}
+			
+			break;
+		}
+		default:
+			ASSERT(false);
+	}
+
+
+	//Update own region data
+	if(updateSelf)
+	{
+		switch(regionChangeType)
+		{
+			case REGION_MOVE_EXTEND_XMINUS:
+			{
+				bounds[0].first = newPositions[0];
+				break;
+			}
+			case REGION_MOVE_EXTEND_XPLUS:
+			{
+				bounds[0].second= newPositions[0];
+				break;
+			}
+			//move the centroid to the new absolute position
+			case REGION_MOVE_TRANSLATE_X:
+			{
+				float delta;
+				delta = (bounds[0].second-bounds[0].first)/2;
+				bounds[0].first=newPositions[0]-delta;
+				bounds[0].second=newPositions[0]+delta;
+				break;
+			}
+			default:
+				ASSERT(false);
+		}
+
+		//Check for inversion
+		if(bounds[0].first  > bounds[0].second)
+		{
+			std::swap(bounds[0].first, bounds[0].second);
+		}
+
+	}
+}
+
 PlotWrapper::PlotWrapper()
 {
 	COMPILE_ASSERT(THREEDEP_ARRAYSIZE(plotModeStrings) == PLOT_TRACE_ENDOFENUM);
+
 	applyUserBounds=false;
 	plotChanged=true;
 	drawLegend=true;
 	interactionLocked=false;
+	highlightRegionOverlaps=false;
 }
 
 PlotWrapper::~PlotWrapper()
@@ -322,6 +462,59 @@ PlotWrapper::~PlotWrapper()
 		delete plottingData[ui];
 }
 
+const PlotWrapper &PlotWrapper::operator=(const PlotWrapper &p)
+{
+	plotChanged=p.plotChanged;
+
+	plottingData.resize(p.plottingData.size());
+
+	for(size_t ui=0; ui<p.plottingData.size(); ui++)
+	{
+		PlotBase *pb;
+		pb=((p.plottingData[ui])->clone());
+
+		plottingData[ui] =pb; 
+	
+	}
+
+	plotChanged=p.plotChanged;
+	lastVisiblePlots=p.lastVisiblePlots;
+	
+	plotIDHandler=p.plotIDHandler;
+	
+	applyUserBounds=p.applyUserBounds;
+	xUserMin=p.xUserMin;
+	yUserMin=p.yUserMin;
+	xUserMax=p.xUserMax;
+	yUserMax=p.yUserMax;
+
+	highlightRegionOverlaps=p.highlightRegionOverlaps;
+	drawLegend=p.drawLegend;
+	interactionLocked=p.interactionLocked;
+
+	return *this;
+}
+
+std::wstring PlotWrapper::getTitle(size_t plotId) const
+{
+	unsigned int plotPos=plotIDHandler.getPos(plotId);
+	return plottingData[plotPos]->title;
+}
+
+void PlotWrapper::getPlotIDs(vector<unsigned int> &ids) const
+{
+	plotIDHandler.getIds(ids);
+}
+
+//TODO: Refactor. Should not make the assumption that parentObject is a filter,
+// in here. Could be anything.
+size_t PlotWrapper::getParentType(size_t plotId) const
+{
+	unsigned int plotPos=plotIDHandler.getPos(plotId);
+	return ((const Filter*)plottingData[plotPos]->parentObject)->getType();
+	
+}
+
 unsigned int PlotWrapper::addPlot(PlotBase *p)
 {
 	plottingData.push_back(p);
@@ -584,18 +777,11 @@ unsigned int PlotWrapper::getVisibleType() const
 	return visibleType;
 }
 
-bool PlotWrapper::visibleEmpty() const
+void PlotWrapper::findRegionLimit(unsigned int plotId, unsigned int regionId,
+				unsigned int movementType, float &maxX, float &maxY) const
 {
-	bool empty=true;
-	for(unsigned int ui=0;ui<plottingData.size() ; ui++)
-	{
-		if(plottingData[ui]->visible)
-		{
-			empty&=plottingData[ui]->empty();
-			if(!empty)
-				return false;
-		}
-	}
+	unsigned int plotPos=plotIDHandler.getPos(plotId);
+	plottingData[plotPos]->regionGroup.findRegionLimit(regionId,movementType,maxX,maxY);
 
 }
 
@@ -681,7 +867,9 @@ void PlotWrapper::drawPlot(mglGraph *gr) const
 	sT.assign(plotTitle.begin(), plotTitle.end()); //unicode conversion
 	gr->Title(sT.c_str());
 	
-	
+
+	bool haveUsedLog=false;
+	mglPoint min,max;
 	switch(visType)
 	{
 		case PLOT_TYPE_ONED:
@@ -701,11 +889,12 @@ void PlotWrapper::drawPlot(mglGraph *gr) const
 						notLog=true;
 				}
 			}
+
+			haveUsedLog|=useLogPlot;
 		
 			//work out the bounding box for the plot,
 			//and where the axis should cross
 			mglPoint axisCross;
-			mglPoint min,max;
 			if(applyUserBounds)
 			{
 				ASSERT(yUserMax >=yUserMin);
@@ -783,7 +972,6 @@ void PlotWrapper::drawPlot(mglGraph *gr) const
 				if(!curPlot->visible)
 					continue;
 
-
 				curPlot->drawRegions(gr,colourFixer,min,max);
 				curPlot->drawPlot(gr,colourFixer);
 				
@@ -808,6 +996,49 @@ void PlotWrapper::drawPlot(mglGraph *gr) const
 				sY = string(TRANS("Mixed log/non-log:")) + sY ;
 			}
 
+			//if we have to draw overlapping regions, do so
+			if(highlightRegionOverlaps)
+			{
+				vector<pair<size_t,size_t> > overlapId;
+				vector<pair<float,float> > overlapXCoords;
+
+				char colourCode=colourFixer.getNextBestColour(1.0f,0.0f,0.0f);
+				getRegionOverlaps(overlapId,overlapXCoords);
+
+				float rMinY,rMaxY;
+				const float ABOVE_AXIS_CONST = 0.1;
+				rMinY = max.y + (max.y-min.y)*(ABOVE_AXIS_CONST-0.025);
+				rMaxY = max.y + (max.y-min.y)*(ABOVE_AXIS_CONST+0.025);
+
+				for(size_t ui=0; ui<overlapXCoords.size();ui++)
+				{
+					float rMinX, rMaxX; 
+					
+					rMinX=overlapXCoords[ui].first;
+					rMaxX=overlapXCoords[ui].second;
+
+
+					//Make sure we don't leave the plot boundary
+					rMinX=std::max(rMinX,(float)min.x);
+					rMaxX=std::min(rMaxX,(float)max.x);
+
+					//If the region is of negligble size, don't bother drawing it
+					if(fabs(rMinX -rMaxX)
+						< sqrt(std::numeric_limits<float>::epsilon()))
+						continue;
+
+
+#ifdef USE_MGL2
+					gr->FaceZ(mglPoint(rMinX,rMinY,-1),rMaxX-rMinX,rMaxY-rMinY,
+							&colourCode);
+#else
+					gr->FaceZ(rMinX,rMinY,-1,rMaxX-rMinX,rMaxY-rMinY,
+							&colourCode);
+#endif
+				}
+
+			}
+
 			break;
 		}
 		default:
@@ -840,6 +1071,7 @@ void PlotWrapper::drawPlot(mglGraph *gr) const
 #endif
 	}
 
+	overlays.draw(gr,colourFixer,min,max,haveUsedLog);
 }
 
 void PlotWrapper::hideAll()
@@ -857,6 +1089,21 @@ void PlotWrapper::setVisible(unsigned int uniqueID, bool setVis)
 	plotChanged=true;
 }
 
+void PlotWrapper::getRegions(vector<pair<size_t,vector<PlotRegion> > > &regions, bool visibleOnly) const
+{
+	vector<unsigned int> ids;
+	getPlotIDs(ids);
+	regions.resize(ids.size());
+
+	for(size_t ui=0;ui<ids.size();ui++)
+	{
+		PlotBase *b;
+		b=plottingData[ids[ui]];
+		if(b->visible || !visibleOnly)
+			regions[ui] = make_pair(ids[ui],b->regionGroup.regions);
+	}
+}
+
 bool PlotWrapper::getRegionIdAtPosition(float x, float y, unsigned int &pId, unsigned int &rId) const
 {
 	for(size_t ui=0;ui<plottingData.size(); ui++)
@@ -865,7 +1112,7 @@ bool PlotWrapper::getRegionIdAtPosition(float x, float y, unsigned int &pId, uns
 		if(!plottingData[ui]->visible)
 			continue;
 
-		if(plottingData[ui]->getRegionIdAtPosition(x,y,rId))
+		if(plottingData[ui]->regionGroup.getRegionIdAtPosition(x,y,rId))
 		{
 			pId=ui;
 			return true;
@@ -875,6 +1122,22 @@ bool PlotWrapper::getRegionIdAtPosition(float x, float y, unsigned int &pId, uns
 	return false;
 }
 
+
+void PlotWrapper::getRegionOverlaps(vector<pair<size_t,size_t> > &ids,
+					vector< pair<float,float> > &coords) const
+{
+	ids.clear();
+	coords.clear();
+
+	for(size_t uk=0;uk<plottingData.size(); uk++)
+	{
+		RegionGroup *r;
+		r=&(plottingData[uk]->regionGroup);
+
+		r->getOverlaps(ids,coords);
+	}
+}
+
 unsigned int PlotWrapper::getNumVisible() const
 {
 	unsigned int num=0;
@@ -895,7 +1158,7 @@ bool PlotWrapper::isPlotVisible(unsigned int plotID) const
 
 void PlotWrapper::getRegion(unsigned int plotId, unsigned int regionId, PlotRegion &region) const
 {
-	plottingData[plotIDHandler.getPos(plotId)]->getRegion(regionId,region);
+	plottingData[plotIDHandler.getPos(plotId)]->regionGroup.getRegion(regionId,region);
 }
 
 unsigned int PlotWrapper::plotType(unsigned int plotId) const
@@ -904,19 +1167,44 @@ unsigned int PlotWrapper::plotType(unsigned int plotId) const
 }
 
 
-void PlotWrapper::moveRegionLimit(unsigned int plotId, unsigned int regionId,
-			unsigned int movementType, float &constrainX, float &constrainY) const
+void PlotWrapper::moveRegion(unsigned int plotID, unsigned int regionId, bool regionSelfUpdate,
+		unsigned int movementType, float newX, float newY) const
 {
-	plottingData[plotIDHandler.getPos(plotId)]->moveRegionLimit(
-				regionId,movementType,constrainX,constrainY);
+	plottingData[plotIDHandler.getPos(plotID)]->regionGroup.moveRegion(regionId,
+						movementType,regionSelfUpdate,newX,newY);
 }
 
 
-void PlotWrapper::moveRegion(unsigned int plotID, unsigned int regionId, unsigned int movementType, 
-							float newX, float newY) const
+void PlotWrapper::switchOutRegionParent(std::map<const RangeFileFilter *, RangeFile> &switchMap)
 {
-	plottingData[plotIDHandler.getPos(plotID)]->moveRegion(regionId,movementType,newX,newY);
+
+	for(size_t ui=0;ui<plottingData.size();ui++)
+	{
+		PlotBase *pb;
+		pb=plottingData[ui];
+		
+		RegionGroup *rg;
+		rg = &(pb->regionGroup);
+		for(size_t uj=0; uj<rg->regions.size();uj++)
+		{
+			//Obtain the parent filter f rthis region, then re-map it
+			// to the rangefile
+			Filter *parentFilt = rg->regions[uj].getParentAsFilter();
+
+			if(parentFilt->getType() != FILTER_TYPE_RANGEFILE)
+				continue;
+
+			RangeFileFilter *rngFilt = (RangeFileFilter *)parentFilt;
+			ASSERT(switchMap.find(rngFilt) != switchMap.end());
+
+			//Set the update method to use the new rangefile
+			rg->regions[uj].setUpdateMethod(PlotRegion::ACCESS_MODE_RANGEFILE,
+						&(switchMap[rngFilt]));
+		}
+	}
 }
+
+
 //-----------
 
 
@@ -932,6 +1220,38 @@ Plot1D::Plot1D()
 	r=(0);g=(0);b=(1);
 }
 
+
+PlotBase *Plot1D::clone() const
+{
+	Plot1D *p = new Plot1D;
+
+	p->logarithmic=logarithmic;
+	p->xValues=xValues;
+	p->yValues=yValues;
+	p->errBars=errBars;
+
+	//TODO Move to base
+	p->plotType=plotType;
+	p->minX=minX;
+	p->maxX=maxX;
+	p->minY=minY;
+	p->maxY=maxY;
+	p->r=r;
+	p->g=g;
+	p->b=b;
+	p->visible=visible;
+	p->traceType=traceType;
+	p->xLabel=xLabel;
+	p->yLabel=yLabel;
+	p->title=title;
+	p->titleAsRawDataLabel=titleAsRawDataLabel;
+	p->parentObject=parentObject;
+	p->regionGroup=regionGroup;
+	p->parentPlotIndex=parentPlotIndex;
+
+	return p;
+}
+
 void Plot1D::setData(const vector<float> &vX, const vector<float> &vY, 
 		const vector<float> &vErr)
 {
@@ -1199,36 +1519,6 @@ void Plot1D::drawPlot(mglGraph *gr,MGLColourFixer &fixer) const
 	
 }
 
-
-
-void Plot1D::addRegion(unsigned int regionID,float start, float end, 
-			float rNew, float gNew, float bNew, Filter *parentFilter)
-{
-	ASSERT(start <end);
-	ASSERT( rNew>=0.0 && rNew <= 1.0);
-	ASSERT( gNew>=0.0 && gNew <= 1.0);
-	ASSERT( bNew>=0.0 && bNew <= 1.0);
-
-	PlotRegion region;
-	//1D plots only have one bounding direction
-	region.bounds.push_back(std::make_pair(start,end));
-	region.boundAxis.push_back(0); // the bounding direction is along the X axis
-	region.parentFilter = parentFilter;
-
-	//Set the ID and create a unique ID (one that is invariant if regions are added or removed)
-	//for the  region
-	region.id = regionID;
-	region.uniqueID = regionIDHandler.genId(regions.size());
-
-	region.r=rNew;
-	region.g=gNew;
-	region.b=bNew;
-
-	regions.push_back(region);
-}
-
-//----
-
 void Plot1D::getRawData(std::vector<std::vector< float> > &rawData,
 				std::vector<std::wstring> &labels) const
 {
@@ -1264,41 +1554,132 @@ void Plot1D::getRawData(std::vector<std::vector< float> > &rawData,
 }
 
 
-void Plot1D::moveRegionLimit(unsigned int regionID, 
+void Plot1D::clear( bool preserveVisiblity)
+{
+	regionGroup.clear();
+}
+
+void Plot1D::drawRegions(mglGraph *gr,MGLColourFixer &fixer,
+		const mglPoint &min,const mglPoint &max) const
+{
+	//Mathgl palette colour name
+	char colourCode[2];
+	colourCode[1]='\0';
+
+
+	for(unsigned int uj=0;uj<regionGroup.regions.size();uj++)
+	{
+		//Compute region bounds, such that it will not exceed the axis
+		float rMinX, rMaxX, rMinY,rMaxY;
+		rMinY = min.y;
+		rMaxY = max.y;
+		rMinX = std::max((float)min.x,regionGroup.regions[uj].bounds[0].first);
+		rMaxX = std::min((float)max.x,regionGroup.regions[uj].bounds[0].second);
+		
+		//Prevent drawing inverted regionGroup.regions
+		if(rMaxX > rMinX && rMaxY > rMinY)
+		{
+			colourCode[0] = fixer.getNextBestColour(regionGroup.regions[uj].r,
+						regionGroup.regions[uj].g,
+						regionGroup.regions[uj].b);
+			colourCode[1] = '\0';
+#ifdef USE_MGL2
+			gr->FaceZ(mglPoint(rMinX,rMinY,-1),rMaxX-rMinX,rMaxY-rMinY,
+					colourCode);
+#else
+			gr->FaceZ(rMinX,rMinY,-1,rMaxX-rMinX,rMaxY-rMinY,
+					colourCode);
+#endif
+					
+		}
+	}
+}
+
+//--
+
+bool RegionGroup::getRegionIdAtPosition(float x, float y, unsigned int &id) const
+{
+	for(unsigned int ui=0;ui<regions.size();ui++)
+	{
+		if(regions[ui].bounds[0].first < x &&
+				regions[ui].bounds[0].second > x )
+		{
+			id=ui;
+			return true;
+		}
+	}
+
+
+	return false;
+}
+
+void RegionGroup::getRegion(unsigned int offset, PlotRegion &r) const
+{
+	r = regions[offset];
+}
+
+
+void RegionGroup::addRegion(unsigned int regionID,float start, float end, 
+			float rNew, float gNew, float bNew, Filter *parentFilter)
+{
+	ASSERT(start <end);
+	ASSERT( rNew>=0.0 && rNew <= 1.0);
+	ASSERT( gNew>=0.0 && gNew <= 1.0);
+	ASSERT( bNew>=0.0 && bNew <= 1.0);
+
+	PlotRegion region(PlotRegion::ACCESS_MODE_FILTER,parentFilter);
+	//1D plots only have one bounding direction
+	region.bounds.push_back(std::make_pair(start,end));
+	//Set the ID for the  region
+	region.id = regionID;
+#ifdef DEBUG
+	//Ensure ID value is unique per parent
+	for(size_t ui=0;ui<regions.size();ui++)
+	{
+		if(regions[ui].getParentAsFilter()== parentFilter)
+		{
+			ASSERT(regionID !=regions[ui].id);
+		}
+	}
+#endif
+
+	region.r=rNew;
+	region.g=gNew;
+	region.b=bNew;
+
+	regions.push_back(region);
+}
+
+void RegionGroup::findRegionLimit(unsigned int offset, 
 			unsigned int method, float &newPosX, float &newPosY)  const
 {
 
-	unsigned int region=regionIDHandler.getPos(regionID);
-	
-	ASSERT(region<regions.size());
+	ASSERT(offset<regions.size());
 
 	//Check that moving this range will not cause any overlaps with 
 	//other regions
 	float mean;
-	mean=(regions[region].bounds[0].first + regions[region].bounds[0].second)/2.0f;
-
-	//Who is the owner of the current plot -- we only want to interact with our colleagues
-	float xMin,xMax,yMin,yMax;
-	getBounds(xMin,xMax,yMin,yMax);
+	mean=(regions[offset].bounds[0].first + regions[offset].bounds[0].second)/2.0f;
 
 	switch(method)
 	{
 		//Left extend
 		case REGION_MOVE_EXTEND_XMINUS:
+		{
 			//Check that the upper bound does not intersect any RHS of 
 			//region bounds
 			for(unsigned int ui=0; ui<regions.size(); ui++)
 			{
-				if((regions[ui].bounds[0].second < mean && ui !=region) )
+				if((regions[ui].bounds[0].second < mean && ui !=offset) )
 						newPosX=std::max(newPosX,regions[ui].bounds[0].second);
 			}
 			//Dont allow past self right
-			newPosX=std::min(newPosX,regions[region].bounds[0].second);
-			//Dont extend outside plot
-			newPosX=std::max(newPosX,xMin);
+			newPosX=std::min(newPosX,regions[offset].bounds[0].second);
 			break;
+		}
 		//shift
 		case REGION_MOVE_TRANSLATE_X:
+		{
 			//Check that the upper bound does not intersect any RHS or LHS of 
 			//region bounds
 			if(newPosX > mean) 
@@ -1307,37 +1688,35 @@ void Plot1D::moveRegionLimit(unsigned int regionID,
 				//Disallow hitting other bounds
 				for(unsigned int ui=0; ui<regions.size(); ui++)
 				{
-					if((regions[ui].bounds[0].first > mean && ui != region) )
+					if((regions[ui].bounds[0].first > mean && ui != offset) )
 						newPosX=std::min(newPosX,regions[ui].bounds[0].first);
 				}
-				newPosX=std::max(newPosX,xMin);
 			}
 			else
 			{
 				//Disallow hitting other bounds
 				for(unsigned int ui=0; ui<regions.size(); ui++)
 				{
-					if((regions[ui].bounds[0].second < mean && ui != region))
+					if((regions[ui].bounds[0].second < mean && ui != offset))
 						newPosX=std::max(newPosX,regions[ui].bounds[0].second);
 				}
-				//Dont extend outside plot
-				newPosX=std::min(newPosX,xMax);
 			}
 			break;
+		}
 		//Right extend
 		case REGION_MOVE_EXTEND_XPLUS:
+		{
 			//Disallow hitting other bounds
 
 			for(unsigned int ui=0; ui<regions.size(); ui++)
 			{
-				if((regions[ui].bounds[0].second > mean && ui != region))
+				if((regions[ui].bounds[0].second > mean && ui != offset))
 					newPosX=std::min(newPosX,regions[ui].bounds[0].first);
 			}
 			//Dont allow past self left
-			newPosX=std::max(newPosX,regions[region].bounds[0].first);
-			//Dont extend outside plot
-			newPosX=std::min(newPosX,xMax);
+			newPosX=std::max(newPosX,regions[offset].bounds[0].first);
 			break;
+		}
 		default:
 			ASSERT(false);
 	}
@@ -1345,88 +1724,147 @@ void Plot1D::moveRegionLimit(unsigned int regionID,
 }
 
 
-void Plot1D::moveRegion(unsigned int regionID, unsigned int method, float newPosX,float newPosY) const
+void RegionGroup::moveRegion(unsigned int offset, unsigned int method, bool selfUpdate,
+						float newPosX,float newPosY) 
 {
-	//Well, we should have called this externally to determine location
-	//let us confirm that this is the case 
-	moveRegionLimit(regionID,method,newPosX,newPosY);
-
-
-	unsigned int region=regionIDHandler.getPos(regionID);
-	ASSERT(regions[region].parentFilter);
+	//TODO:  Change function signature to handle vector directly,
+	// rather than repackaging it?
+	vector<float> v;
 
-	//Pass the filter ID value stored in the region to the filter, along with the new
-	//value to take for that filter ID
-	regions[region].parentFilter->setPropFromRegion(method,regions[region].id,newPosX);	
+	v.push_back(newPosX);
+	v.push_back(newPosY);
+	
+	regions[offset].updateParent(method,v,selfUpdate);
 
+	haveOverlapCache=false;
 }
 
-
-void Plot1D::drawRegions(mglGraph *gr,MGLColourFixer &fixer,
-		const mglPoint &min,const mglPoint &max) const
+void RegionGroup::getOverlaps(vector<pair<size_t,size_t> > &ids,
+				vector< pair<float,float> > &coords) const
 {
-	//Mathgl palette colour name
-	char colourCode[2];
-	colourCode[1]='\0';
-	
-	for(unsigned int uj=0;uj<regions.size();uj++)
+
+	//Rebuild the cache as needed
+	if(!haveOverlapCache)
 	{
-		//Compute region bounds, such that it will not exceed the axis
-		float rMinX, rMaxX, rMinY,rMaxY;
-		rMinY = min.y;
-		rMaxY = max.y;
-		rMinX = std::max((float)min.x,regions[uj].bounds[0].first);
-		rMaxX = std::min((float)max.x,regions[uj].bounds[0].second);
-		
-		//Prevent drawing inverted regions
-		if(rMaxX > rMinX && rMaxY > rMinY)
+		overlapIdCache.clear();
+		overlapCoordsCache.clear();
+		//Loop through upper triangular region of cross, checking for overlap
+		for(unsigned int ui=0;ui<regions.size();ui++)
 		{
-			colourCode[0] = fixer.getNextBestColour(regions[uj].r,
-						regions[uj].g,regions[uj].b);
-			colourCode[1] = '\0';
-#ifdef USE_MGL2
-			gr->FaceZ(mglPoint(rMinX,rMinY,-1),rMaxX-rMinX,rMaxY-rMinY,
-					colourCode);
-#else
-			gr->FaceZ(rMinX,rMinY,-1,rMaxX-rMinX,rMaxY-rMinY,
-					colourCode);
-#endif
-					
+			float minA,maxA;
+			minA=regions[ui].bounds[0].first;
+			maxA=regions[ui].bounds[0].second;
+			for(unsigned int uj=ui+1;uj<regions.size();uj++)
+			{
+				float minB,maxB;
+				minB=regions[uj].bounds[0].first;
+				maxB=regions[uj].bounds[0].second;
+				//If the coordinates overlap, then record their ID
+				// and their coordinates, in plot units
+				if(rangesOverlap(minA,maxA,minB,maxB))
+				{
+					overlapIdCache.push_back(make_pair(ui,uj));
+					overlapCoordsCache.push_back(
+						make_pair(std::max(minA,minB),std::min(maxA,maxB)) );
+				}
+			}
 		}
+
+		haveOverlapCache=true;
 	}
+
+	ids.reserve(ids.size() + overlapIdCache.size());
+	for(unsigned int ui=0;ui<overlapIdCache.size();ui++)
+		ids.push_back(overlapIdCache[ui]);
+
+	coords.reserve(coords.size() + overlapCoordsCache.size());
+	for(unsigned int ui=0;ui<overlapCoordsCache.size();ui++)
+		coords.push_back(overlapCoordsCache[ui]);
+
 }
 
 
-void Plot1D::clear( bool preserveVisiblity)
+void PlotWrapper::setRegionGroup(size_t plotId,RegionGroup &r)
 {
-	regions.clear();
-	regionIDHandler.clear();
+	size_t offset=plotIDHandler.getPos(plotId);
+	//Overwrite the plot's region group
+	plottingData[offset]->regionGroup=r;
 }
 
-bool Plot1D::getRegionIdAtPosition(float x, float y, unsigned int &id) const
+
+void PlotOverlays::draw(mglGraph *gr,MGLColourFixer &fixer, 
+		const mglPoint &boundMin, const mglPoint &boundMax,bool logMode ) const
 {
-	for(unsigned int ui=0;ui<regions.size();ui++)
+
+	if(!isEnabled)
+		return;
+
+	char colourCode[2];
+
+	//Draw the overlays in black
+	colourCode[0] = fixer.getNextBestColour(0.0,0.0,0.0);
+	colourCode[1]='\0';
+	
+	for(size_t ui=0;ui<overlayData.size();ui++)
 	{
-		ASSERT(regions[ui].boundAxis.size() == regions[ui].bounds.size() &&
-				regions[ui].boundAxis.size()==1);
-		ASSERT(regions[ui].boundAxis[0] == 0);
+		if(!overlayData[ui].enabled)
+			continue;
 
+		vector<float> bufX,bufY;
+		float maxV;
+		maxV=-std::numeric_limits<float>::max();
 
-		if(regions[ui].bounds[0].first < x &&
-				regions[ui].bounds[0].second > x )
+		bufX.resize(overlayData[ui].coordData.size());
+		bufY.resize(overlayData[ui].coordData.size());
+		for(size_t uj=0;uj<overlayData[ui].coordData.size();uj++)	
 		{
-			id=ui;
-			return true;
+			bufX[uj]=overlayData[ui].coordData[uj].first;
+			bufY[uj]=overlayData[ui].coordData[uj].second;
+			
+			maxV=std::max(maxV,bufY[uj]);
 		}
-	}
 
+		//Rescale to plot size
+		for(size_t uj=0;uj<overlayData[ui].coordData.size();uj++)
+		{
+			if(logMode)
+			{
+				//Compute log10(probability*maximum) = 
+				//	log10(probability) + log10(maximum)
+				// maximum = 10^boundMax.y
+
+				bufY[uj]=log10(bufY[uj]) +boundMax.y*0.95;
+				bufY[uj]=std::max(bufY[uj],0.0f);
+			}
+			else
+			{
+				bufY[uj]*=boundMax.y/maxV*0.95;
+			}
+		}
 
-	return false;
-}
+		//Draw stems. can't use stem plot due to mathgl bug whereby single stems
+		// will not be drawn
+		for(size_t uj=0;uj<overlayData[ui].coordData.size();uj++)
+		{
+			if(bufX[uj]> boundMin.x && bufX[uj]< boundMax.x && 
+					boundMin.y < bufY[uj])
+			{
+				gr->Line (mglPoint(bufX[uj],std::max(0.0f,(float)boundMin.y)),
+					mglPoint(bufX[uj],bufY[uj]),colourCode,100);
 
-void Plot1D::getRegion(unsigned int id, PlotRegion &r) const
-{
-	r = regions[regionIDHandler.getPos(id)];
-}
+				//Print labels near to the text
+				const float STANDOFF_FACTOR=1.05;
+#ifdef USE_MGL2
+				gr->Text(mglData(bufX[uj]),mglData(bufY[uj]*STANDOFF_FACTOR),
+					overlayData[ui].title.c_str());
+#else
+				//Font size in mathgl uses negative values to set a relative font size
+				gr->Text(mglPoint(bufX[uj],bufY[uj]*STANDOFF_FACTOR),
+					overlayData[ui].title.c_str(),"",-0.6);
 
+#endif
+			}
+		}
+	}
+}
 
diff --git a/src/backend/plot.h b/src/backend/plot.h
index 0823c3e..047e270 100644
--- a/src/backend/plot.h
+++ b/src/backend/plot.h
@@ -22,6 +22,8 @@
 
 #include "backend/filter.h"
 
+#include <map>
+
 
 #if  defined(WIN32) || defined(WIN64)
 	//Help mathgl out a bit: we don't need the GSL on this platform
@@ -40,7 +42,6 @@
 #undef isnan
 
 
-
 enum
 {
 	PLOT_TYPE_ONED,
@@ -83,24 +84,130 @@ class MGLColourFixer
 		static unsigned int getMaxColours();
 };
 
+
 //!Data class  for holding info about non-overlapping 
 // interactive rectilinear "zones" overlaid on plots 
+// update method must be set.
 class PlotRegion
 {
+	private:
+		size_t accessMode;
+
+		void *parentObject;
+
+
 	public:
-		//Axis along which bounds are set. Each entry is unique
-		vector<int> boundAxis;
+		enum
+		{
+			ACCESS_MODE_FILTER,
+			ACCESS_MODE_RANGEFILE,
+			ACCESS_MODE_ENUM_END
+		};
+		
 		//Bounding limits for axial bind
 		vector<std::pair<float,float> > bounds;
 
 		//Bounding region colour
 		float r,g,b;
-		//The parent filter, so region can tell who the parent is
-		Filter *parentFilter;
-		//The ID value for this region, used when interacting with parent filter
+
+		//The ID value for this region, used when interacting with parent object
 		unsigned int id;
-		//!Unique ID for region across entire multiplot
-		unsigned int uniqueID;
+		
+		PlotRegion();
+
+		PlotRegion(size_t updateMethod,void *parentObject);
+
+		const PlotRegion &operator=(const PlotRegion &r);
+
+		//Alter the update method
+		void setUpdateMethod(size_t updateMethod, void *parentObject);
+
+		//Update the parent object using the curretn update method
+		void updateParent(size_t method, const vector<float> &newBounds, bool updateSelf=true);
+
+		//Retrieve the parent as a filter object - must be in ACCESS_MODE_FILTER
+		Filter *getParentAsFilter() const { ASSERT(accessMode==ACCESS_MODE_FILTER); return (Filter*)parentObject;};
+
+		RangeFile *getParentAsRangeFile() const { ASSERT(accessMode==ACCESS_MODE_RANGEFILE); return (RangeFile*)parentObject;};
+
+};
+
+//Handles an array of regions, for drawing and editing of the array
+
+class RegionGroup
+{
+	private:
+		//cache for region overlaps, to reduce need to search
+		mutable vector<pair<size_t,size_t> > overlapIdCache;
+		mutable vector<pair<float,float> > overlapCoordsCache;
+
+		mutable bool haveOverlapCache;
+	public:
+		RegionGroup() { haveOverlapCache=false;};
+		//!Interactive, or otherwise marked plot regions
+		vector<PlotRegion> regions;
+
+
+		void clear() {regions.clear(); };
+		
+		//!Append a region to the plot
+		void addRegion(unsigned int regionId, float start, float end,	
+				float r,float g, float b, Filter *parentFilter);
+		//!Retrieve the ID of the non-overlapping region in X-Y space
+		bool getRegionIdAtPosition(float x, float y, unsigned int &id) const;
+		//!Retrieve a region using its ID
+		void getRegion(unsigned int id, PlotRegion &r) const;
+
+		//!Get the number of regions;
+		size_t getNumRegions() const { return regions.size();};
+		
+		//!Pass the region movement information to the parent filter object
+		// newX and newY should be absolute positions.
+		void moveRegion(unsigned int regionId, unsigned int method, bool selfUpdate,
+							float newX, float newY);
+		//!Obtain limit of motion for a given region movement type
+		void findRegionLimit(unsigned int regionId,
+				unsigned int movementType, float &maxX, float &maxY) const;
+
+
+		void getOverlaps(vector<pair<size_t,size_t> > &ids,
+				vector< pair<float,float> > &coords) const;
+};
+
+struct  OVERLAY_DATA
+{
+	//Coordinate and amplitude
+	vector<pair<float, float> > coordData;
+	//title for all of te specified overlay data
+	string title;
+	//If the overlay is enabled or not
+	bool enabled;
+};
+
+class PlotOverlays
+{
+	private:
+		bool isEnabled;
+		// List of the overlays that can be shown on the given plot
+		vector<OVERLAY_DATA>  overlayData;
+	public:
+		PlotOverlays() : isEnabled(true) {}
+		//Add a new overlay to the plot
+		void add(const OVERLAY_DATA &overlay) {overlayData.push_back(overlay);}
+		//Draw the overlay on the current plot
+		void draw(mglGraph *g,MGLColourFixer &fixer, 
+			const mglPoint &boundMin, const mglPoint &boundMax,bool logMode) const;
+		//Enable the specified overlay
+		void setEnabled(size_t offset,bool isEnabled) 
+			{ASSERT(offset <overlayData.size()); overlayData[offset].enabled=isEnabled;}
+
+		void setEnabled(bool doEnable)  {isEnabled=doEnable;}
+		bool enabled() const { return isEnabled;}
+		
+		void clear() {overlayData.clear();}
+		void erase(size_t item) {ASSERT(item < overlayData.size()); overlayData.erase(overlayData.begin() + item);;}
+
+		const vector<OVERLAY_DATA> &getOverlays() const { return overlayData;};
 
 };
 
@@ -110,6 +217,9 @@ class PlotBase
 	public:
 		PlotBase(){};
 		virtual ~PlotBase(){};
+
+		virtual PlotBase *clone() const = 0;
+
 		//The type of plot (ie what class is it?)	
 		unsigned int plotType;
 		
@@ -136,14 +246,13 @@ class PlotBase
 		//!Pointer to some constant object that generated this plot
 		const void *parentObject;
 
-		//!Interactive, or otherwise marked plot regions
-		vector<PlotRegion> regions;
-		//ID handler for regions
-		UniqueIDHandler regionIDHandler;
-
 		//!integer to show which of the n plots that the parent generated
 		//that this data is represented by
 		unsigned int parentPlotIndex;
+
+
+		RegionGroup regionGroup;
+
 	
 		//True if the plot has data
 		virtual bool empty() const=0;
@@ -159,21 +268,6 @@ class PlotBase
 		virtual void getRawData(vector<vector<float> > &f,
 				std::vector<std::wstring> &labels) const=0;
 
-		//!Retrieve the ID of the non-overlapping region in X-Y space
-		virtual bool getRegionIdAtPosition(float x, float y, unsigned int &id) const=0;
-		//!Retrieve a region using its unique ID
-		virtual void getRegion(unsigned int id, PlotRegion &r) const=0;
-
-		//!Get the number of regions;
-		size_t getNumRegions() const { return regions.size();};
-		
-		//!Pass the region movement information to the parent filter object
-		virtual void moveRegion(unsigned int regionId, unsigned int method, 
-							float newX, float newY) const=0;
-
-		//!Obtain limit of motion for a given region movement type
-		virtual void moveRegionLimit(unsigned int regionId,
-				unsigned int movementType, float &maxX, float &maxY) const=0;
 
 };
 
@@ -188,11 +282,11 @@ class Plot1D : public PlotBase
 		//!Data
 		std::vector<float> xValues,yValues,errBars;
 		
-		
 	public:
 		Plot1D();
 		virtual bool empty() const;
-		
+		virtual PlotBase *clone() const;
+			
 		void getBounds(float &xMin,float &xMax,float &yMin,float &yMax) const;
 
 		//!Set the plot data from a pair and symmetric Y error
@@ -203,15 +297,8 @@ class Plot1D : public PlotBase
 		void setData(const vector<float> &vX, const vector<float> &vY,
 							const vector<float> &symYErr);
 
-		//!Append a region to the plot
-		void addRegion(unsigned int regionId, float start, float end,	
-				float r,float g, float b, Filter *parentFilter);
 		
-		//!Try to move a region from its current position to a new position
-		//return the test coord. valid methods are 0 (left extend), 1 (slide), 2 (right extend)
-		float moveRegionTest(unsigned int region, unsigned int method, float newPos) const;
-
-		//!Move a region to a new location. MUST call moveRegionTest first.
+		//!Move a region to a new location. 
 		void moveRegion(unsigned int region, unsigned int method, float newPos);
 
 		void clear(bool preserveVisibility);
@@ -233,7 +320,7 @@ class Plot1D : public PlotBase
 		//!Retrieve the ID of the non-overlapping region in X-Y space
 		bool getRegionIdAtPosition(float x, float y, unsigned int &id) const;
 
-		//!Retrieve a region using its unique ID
+		//!Retrieve a region using its ID
 		void getRegion(unsigned int id, PlotRegion &r) const;
 	
 		//!Pass the region movement information to the parent filter object
@@ -243,7 +330,7 @@ class Plot1D : public PlotBase
 		//overlap after a move operation. Note that the output variables will only
 		//be set for the appropriate motion direction. Eg, an X only move will not
 		//set limitY.
-		void moveRegionLimit(unsigned int regionId,
+		void findRegionLimit(unsigned int regionId,
 				unsigned int movementType, float &limitX, float &limitY) const;
 
 		bool wantLogPlot() const { return logarithmic;};
@@ -259,7 +346,8 @@ class PlotWrapper
 		//!Elements of the plot
 		std::vector<PlotBase *> plottingData;
 
-		//!which plots were last visible?
+		//! Data regarding plots were visible previously
+		// first pair entry is the parent object pointer. second is the parent plot index
 		std::vector<std::pair< const void *, unsigned int> > lastVisiblePlots;
 	
 		//Position independant ID handling for the 
@@ -282,19 +370,40 @@ class PlotWrapper
 		//  will be hinted to take correct action
 		bool interactionLocked;
 
+		//!Do we want to highlight positions where regions overlap?
+		bool highlightRegionOverlaps;
+
 	public:
+		//"stick" type overlays for marking amplitudes on top of the plot
+		PlotOverlays overlays;
+		
 		//!Constructor
 		PlotWrapper();
 
 		//!Destructor must delete target plots
 		~PlotWrapper();
 
-		//Returns true if the visible plots have no data
-		// in the case of no visible plots, returns true.
-		bool visibleEmpty() const;
+		const PlotWrapper &operator=(const PlotWrapper &oth);
+
+		//Return  the number of plots
+		size_t numPlots() const { return plottingData.size();}
+
+		//Retrieve the IDs for the stored plots
+		void getPlotIDs(vector<unsigned int> &ids) const ;
+
+		//Retrieve the title of the plot
+		std::wstring getTitle(size_t plotId) const;
+
 
+		void setEnableHighlightOverlap(bool enable=true) { highlightRegionOverlaps=enable;}
+
+		//get the type of parent filter that generated the plot
+		size_t getParentType(size_t plotId) const;
+
+		//True if user is not allowed to interact with plot
 		bool isInteractionLocked() const { return interactionLocked;};
 
+		//Disallow interaction with plot (lock=true), or enable interaction (lock=false)
 		void lockInteraction(bool lock=true) {interactionLocked=lock;};
 
 		//!Has the contents of the plot changed since the last call to resetChange?
@@ -324,7 +433,10 @@ class PlotWrapper
 		//!Set the parent information for a given plot
 		void setParentData(unsigned int plotID,
 				const void *parentObj, unsigned int plotIndex);
-		
+	
+		//!Get the parent object fo rthis plot
+		const void *getParent(unsigned int plotID) { ASSERT(plotID < plottingData.size()); return plottingData[plotID]->parentObject;}
+
 		//!Set the plotting mode.
 		void setTraceStyle(unsigned int plotID,unsigned int mode);
 
@@ -342,6 +454,9 @@ class PlotWrapper
 
 		//!Get the number of visible plots
 		unsigned int getNumVisible() const;
+		
+		//!Get the number of visible plots
+		unsigned int getNumTotal() const { return plottingData.size(); };
 
 		//!Returns true if plot is visible, based upon its uniqueID.
 		bool isPlotVisible(unsigned int plotID) const;
@@ -374,6 +489,14 @@ class PlotWrapper
 		//Return the region data for the given regionID/plotID combo
 		void getRegion(unsigned int plotId, unsigned int regionId, PlotRegion &r) const;
 
+		//Get all of the (id, regions) for plots. Bool allows for only the plots that are visible to be obtained
+		void getRegions(vector<pair<size_t,vector<PlotRegion> > > &regions, bool visibleOnly=true) const;
+		
+		//Return the ID and coordinates of any overlapping regions
+		// - this only returns overlaps for individual plots - not between plots
+		void getRegionOverlaps(std::vector<pair<size_t,size_t> > &ids,
+							std::vector< pair<float,float> > &coords) const;
+
 		//!Retrieve the raw data associated with the selected plots.
 		void getRawData(vector<vector<vector<float> > >  &data, std::vector<std::vector<std::wstring> >  &labels) const;
 	
@@ -385,12 +508,18 @@ class PlotWrapper
 		unsigned int getVisibleType() const;
 
 		//!Obtain limit of motion for a given region movement type
-		void moveRegionLimit(unsigned int plotId, unsigned int regionId,
+		void findRegionLimit(unsigned int plotId, unsigned int regionId,
 				unsigned int movementType, float &maxX, float &maxY) const;
 
 		//!Pass the region movement information to the parent filter object
-		void moveRegion(unsigned int plotID, unsigned int regionId, unsigned int movementType, 
-							float newX, float newY) const;
+		void moveRegion(unsigned int plotID, unsigned int regionId, bool regionSelfUp,
+					unsigned int movementType, float newX, float newY) const;
+
+		//Change the regions to modify the given rangefiles, for each of the 
+		// rangefile filters in the map
+		void switchOutRegionParent(std::map<const RangeFileFilter *, RangeFile> &switchMap);
+
+		void setRegionGroup(size_t plotId, RegionGroup &r);
 };
 
 #endif
diff --git a/src/backend/state.cpp b/src/backend/state.cpp
index ba615ea..7ec92c9 100644
--- a/src/backend/state.cpp
+++ b/src/backend/state.cpp
@@ -32,6 +32,8 @@ AnalysisState::AnalysisState()
 	modifyLevel=STATE_MODIFIED_NONE;
 	useRelativePathsForSave=false;
 	activeCamera=0;
+
+	rBack=gBack=bBack=0;
 }
 
 
@@ -74,6 +76,11 @@ void AnalysisState::operator=(const AnalysisState &oth)
 
 }
 
+AnalysisState::~AnalysisState()
+{
+	clear();
+}
+
 
 void AnalysisState::clear()
 {
@@ -145,7 +152,6 @@ bool AnalysisState::save(const char *cpFilename, std::map<string,string> &fileMa
 		//- we don't want to leak path names to remote systems 
 		//and
 		//- we cannot assume that directory structures are preserved between systems
-		//
 		//so don't keep working directory in this case.
 		if(writePackage || workingDir.empty() )
 		{
@@ -250,7 +256,7 @@ bool AnalysisState::load(const char *cpFilename, std::ostream &errStream, bool m
 	}
 
 	//Open the XML file
-	doc = xmlCtxtReadFile(context, cpFilename, NULL,0);
+	doc = xmlCtxtReadFile(context, cpFilename, NULL,XML_PARSE_NOENT|XML_PARSE_NONET);
 
 	if(!doc)
 		return false;
@@ -704,8 +710,17 @@ bool AnalysisState::load(const char *cpFilename, std::ostream &errStream, bool m
 			// camera (one that does not show up to the users,
 			// and cannot be erased from the scene)
 			// set it directly. Otherwise, its a user camera.
-			savedCameras.push_back(newCameraVec[ui]);
-			activeCamera=ui;
+			if(newCameraVec[ui]->getUserString().size())
+			{
+				savedCameras.push_back(newCameraVec[ui]);
+				activeCamera=ui;
+			}
+			else
+			{
+				ASSERT(savedCameras.size());
+				delete savedCameras[0];
+				savedCameras[0]=newCameraVec[ui];
+			}
 		}
 
 	}
@@ -835,7 +850,7 @@ void AnalysisState::copyEffects(vector<Effect *> &e) const
 }
 
 
-void AnalysisState::setBackgroundColour(float &r, float &g, float &b)
+void AnalysisState::setBackgroundColour(float r, float g, float b)
 {
 	if(rBack != r || gBack!=g || bBack!=b)
 		setModifyLevel(STATE_MODIFIED_VIEW);
@@ -983,3 +998,53 @@ void AnalysisState::eraseStash(size_t offset)
 	stashedTrees.erase(stashedTrees.begin() + offset);
 }
 
+
+
+#ifdef DEBUG
+
+#include "./filters/ionDownsample.h"
+bool testStateReload();
+
+bool runStateTests()
+{
+	return testStateReload();
+}
+
+bool testStateReload()
+{
+
+	AnalysisState someState;
+	someState.setWorldAxisMode(0);
+	someState.setBackgroundColour(0,0,0);
+
+	FilterTree tree;
+	IonDownsampleFilter *f = new IonDownsampleFilter;
+	tree.addFilter(f,NULL);
+
+	someState.setFilterTreeByClone(tree);
+	someState.addStashedTree(make_pair("someStash",tree));
+
+	std::string saveString;
+	genRandomFilename(saveString);
+
+	map<string,string> dummyMapping;
+	someState.save(saveString.c_str(),dummyMapping,false);
+	someState.clear();
+
+	std::ofstream strm;
+	someState.load(saveString.c_str(),strm,false);
+
+
+	TEST(someState.getStashCount() == 1,"Stash save+load");
+	std::pair<string,FilterTree> stashOut;
+	someState.copyStashedTree(0,stashOut);
+	TEST(stashOut.first == "someStash","Stash name conservation");
+
+	TEST(stashOut.second.size() == tree.size(),"reloaded stash count");
+	
+	rmFile(saveString);
+
+	return true;
+}
+
+#endif
diff --git a/src/backend/state.h b/src/backend/state.h
index ce371f2..c89333d 100644
--- a/src/backend/state.h
+++ b/src/backend/state.h
@@ -27,6 +27,10 @@
 #include "tree.hh"
 #include "filtertree.h"
 
+//Unit tests
+#ifdef DEBUG
+bool runStateTests();
+#endif
 
 
 struct FilterTreeState
@@ -89,7 +93,7 @@ class AnalysisState
 		std::string workingDir;
 		//===
 
-		//true if modification to state has occured
+		//true if modification to state has occurred
 		mutable int modifyLevel;
 
 		//file to save to
@@ -110,6 +114,9 @@ class AnalysisState
 		void setModifyLevel(int newLevel) { modifyLevel=std::max(newLevel,modifyLevel);}
 	public:
 		AnalysisState();
+
+		~AnalysisState();
+
 		//Wipe the state clean
 		void clear();
 
@@ -154,7 +161,7 @@ class AnalysisState
 		void copyEffects(vector<Effect *> &effects) const;
 
 		//Set the background colour for the 
-		void setBackgroundColour(float &r, float &g, float &b);
+		void setBackgroundColour(float r, float g, float b);
 
 		//set the display mode for the world XYZ axes
 		void setWorldAxisMode(unsigned int mode);
diff --git a/src/backend/tree.hh b/src/backend/tree.hh
old mode 100644
new mode 100755
diff --git a/src/backend/viscontrol.cpp b/src/backend/viscontrol.cpp
index 21089c7..f26dc9f 100644
--- a/src/backend/viscontrol.cpp
+++ b/src/backend/viscontrol.cpp
@@ -18,8 +18,8 @@
 
 #include "viscontrol.h"
 
-#include "wxcommon.h"
-#include "wxcomponents.h"
+#include "wx/wxcommon.h"
+#include "wx/wxcomponents.h"
 #include "gl/scene.h"
 
 
@@ -160,6 +160,8 @@ void VisController::switchoutFilterTree(FilterTree &f)
 //!Duplicate a branch of the tree to a new position. Do not copy cache,
 bool VisController::copyFilter(size_t toCopy, size_t newParent,bool copyToRoot) 
 {
+	pushUndoStack();
+	
 	bool ret;
 	if(copyToRoot)
 		ret=filterTree.copyFilter(filterMap[toCopy],0);
@@ -273,20 +275,29 @@ unsigned int VisController::refreshFilterTree(bool doUpdateScene)
 
 
 	const Filter *lastFilt=0;
+	//Copy the console mesages to the output text box
 	for(size_t ui=0;ui<consoleMessages.size(); ui++)
 	{
-		if(lastFilt !=consoleMessages[ui].first)
+		//If the consol messages are from a new filter
+		if(lastFilt !=consoleMessages[ui].first || !ui)
 		{
+			//If we are at a new filter, which is not the first,
+			//close out the "=" line
+			if(ui)
+				textConsole->AppendText(wxT("============\n\n\n"));
+
 			lastFilt=consoleMessages[ui].first;
 			textConsole->AppendText(wxStr(lastFilt->getUserString()));
-			textConsole->AppendText(wxT("\n------------\n"));
+			textConsole->AppendText(wxT("\n============\n"));
 		}
 		textConsole->AppendText(wxStr(consoleMessages[ui].second));
 		textConsole->AppendText(wxT("\n"));
 	}
 
 	if(consoleMessages.size())
-		textConsole->AppendText(wxT("\n"));
+	{
+		textConsole->AppendText(wxT("\n============\n"));
+	}
 
 
 	if(errCode)
@@ -355,7 +366,7 @@ void VisController::updateWxTreeCtrl(wxTreeCtrl *t, const Filter *visibleFilt)
 	upWxTreeCtrl(filterTree,t,filterMap,persistentFilters,visibleFilt);
 }
 
-void VisController::updateFilterPropGrid(wxPropertyGrid *g,size_t filterId) const	
+void VisController::updateFilterPropGrid(wxCustomPropGrid *g,size_t filterId) const	
 {
 	//The filterID can never be set to zero,
 	//except for the root item, as set by
@@ -440,6 +451,8 @@ void VisController::getFilterUpdates()
 
 	}
 
+	targetScene->resetModifiedBindings();
+
 	currentState.setFilterTreeByClone(filterTree);
 	//we have retrieved the updates.
 	pendingUpdates=false;
@@ -535,7 +548,7 @@ unsigned int VisController::updateScene(list<vector<const FilterStreamData *> >
 	//Names for plots
 	vector<std::pair<size_t,string> > plotLabels;
 
-
+	//rate-limit the number of drawables to show in the scene
 	throttleSceneInput(sceneData);
 
 
@@ -626,7 +639,7 @@ unsigned int VisController::updateScene(list<vector<const FilterStreamData *> >
 								//add a region to the plot,
 								//using the region data stored
 								//in the plot stream
-								plotNew->addRegion(plotData->regionID[ui],
+								plotNew->regionGroup.addRegion(plotData->regionID[ui],
 									plotData->regions[ui].first,
 									plotData->regions[ui].second,
 									plotData->regionR[ui],
@@ -681,12 +694,10 @@ unsigned int VisController::updateScene(list<vector<const FilterStreamData *> >
 					//Loop through vector, Adding each object to the scene
 					if(drawData->cached)
 					{
-						ASSERT(false);
-						//FIXME: IMPLEMENT ME
 						//Create a *copy* for scene. Filter still holds
 						//originals, and will dispose of the pointers accordingly
-						//for(unsigned int ui=0;ui<drawObjs->size();ui++)
-						//	sceneDrawables.push_back((*drawObjs)[ui]->clone());
+						for(unsigned int ui=0;ui<drawObjs->size();ui++)
+							sceneDrawables.push_back((*drawObjs)[ui]->clone());
 					}
 					else
 					{
@@ -821,7 +832,7 @@ unsigned int VisController::updateScene(list<vector<const FilterStreamData *> >
 			wxListUint *l;
 			unsigned int plotID;
 
-			//Retreive the uniqueID
+			//Retrieve the uniqueID
 			l=(wxListUint*)plotSelList->GetClientObject(ui);
 			plotID = l->value;
 			if(targetPlots->isPlotVisible(plotID))
@@ -956,7 +967,7 @@ bool VisController::setCam(unsigned int offset)
 	return true;
 }
 
-void VisController::updateCamPropertyGrid(wxPropertyGrid *g,unsigned int offset) const
+void VisController::updateCamPropertyGrid(wxCustomPropGrid *g,unsigned int offset) const
 {
 
 	//Erase the grid
@@ -1343,7 +1354,7 @@ void VisController::updateConsole(const std::vector<std::string> &v, const Filte
 		std::string s;
 		s = f->getUserString() + string(" : ") + v[ui];
 		textConsole->AppendText(wxStr(s));
-		textConsole->AppendText(_("\n"));
+		textConsole->AppendText(wxT("\n"));
 
 	}
 }
diff --git a/src/backend/viscontrol.h b/src/backend/viscontrol.h
index 314b551..d329fd9 100644
--- a/src/backend/viscontrol.h
+++ b/src/backend/viscontrol.h
@@ -24,7 +24,7 @@
 
 class VisController;
 class wxGrid;
-class wxPropertyGrid;
+class wxCustomPropGrid;
 class wxTreeCtrl;
 
 class Scene;
@@ -67,7 +67,7 @@ class VisController
 		//--- Data storage ----
 		AnalysisState currentState;
 		
-		//TODO: Migrate to analyis state
+		//TODO: Migrate to analysis state
 		//!Primary data storage for filter tree
 		FilterTree filterTree;
 	
@@ -136,6 +136,8 @@ class VisController
 		//-----------------
 		//!Run a refresh of the underlying tree. Returns 0 on success
 		// iff return value == 0, then scene update has been initiated
+		// otherwise returns error code value for filter, pr
+		// one of the "higher" value error code, ( >=FILTERTREE_REFRESH_ERR_MEM);
 		unsigned int refreshFilterTree(bool doUpdateScene=true);
 
 		
@@ -158,7 +160,7 @@ class VisController
 					size_t typeMask=0, bool maskPrevents=true) const;
 
 
-		//!Add a new filter to the tree. set isbase=false and parentID for not
+		//!Add a new filter to the tree. Set isbase=false and parentID for not
 		//setting a parent (ie making filter base)
 		void addFilter(Filter *f, bool isBase, size_t parentId);
 		
@@ -171,8 +173,9 @@ class VisController
 						size_t parentId=(unsigned int)-1); 
 
 		//!Grab the filter tree from the internal one, and swap the 
-		// internal with a cloned copy. Can be used eg, to steal the cache
-		// Note that the passed filter tree will be destroyed.
+		// internal with a cloned copy of the internal.
+		// Can be used eg, to steal the cache
+		// Note that the contents of the incoming filter tree will be destroyed.
 		//  -> This implies the tree comes *OUT* of viscontrol,
 		//     and a tree  cannot be inserted in via this function
 		void switchoutFilterTree(FilterTree &f);
@@ -191,7 +194,7 @@ class VisController
 
 		const Filter* getFilterById(size_t filterId) const; 
 
-		//!Return all of a given type of filter from the filter tree
+		//!Return all of a given type of filter from the filter tree. Type must be the exact type of filter - it is not a mask
 		void getFiltersByType(std::vector<const Filter *> &filters, unsigned int type)  const;
 
 		//!Returns true if the tree contains any state overrides (external entity referrals)
@@ -217,7 +220,7 @@ class VisController
 		//Move a filter from one part of the tree to another
 		bool reparentFilter(size_t filterID, size_t newParentID);
 
-		//!Set the properties using a key-value result (as obtained from updatewxPropertyGrid)
+		//!Set the properties using a key-value result (as obtained from updatewxCustomPropGrid)
 		/*
 		 * The return code tells whether to reject or accept the change. 
 		 * need update tells us if the change to the filter resulted in a change to the scene
@@ -234,6 +237,10 @@ class VisController
 		//!Clear all caches
 		void clearCacheByType(unsigned int type) { filterTree.clearCacheByType(type);};
 
+		//Overwrite the contents of the pointed-to range files with
+		// the map contents
+		void modifyRangeFiles(const map<const RangeFile *, const RangeFile *> &toModify) { filterTree.modifyRangeFiles(toModify);};
+
 		//-----------------
 
 
@@ -249,6 +256,8 @@ class VisController
 		void setScene(Scene *theScene);
 		//!Set the backend plot
 		void setPlotWrapper(PlotWrapper *thePlots){targetPlots=thePlots;};
+		
+		PlotWrapper *getPlotWrapper(){return targetPlots;};
 		//!Set the listbox for plot selection
 		void setPlotList(wxListBox *box){plotSelList=box;};
 		
@@ -260,8 +269,8 @@ class VisController
 		//!Write out the filters into a wxtreecontrol.
 		// optional argument is the fitler to keep visible in the control
 		void updateWxTreeCtrl(wxTreeCtrl *t,const Filter *f=0);
-		//!Update a wxtGrid with the properties for a given filter
-		void updateFilterPropGrid(wxPropertyGrid *g,size_t filterId) const;
+		//!Update a wxCustomPropGrid with the properties for a given filter
+		void updateFilterPropGrid(wxCustomPropGrid *g,size_t filterId) const;
 			
 
 
@@ -276,12 +285,12 @@ class VisController
 		unsigned int addCam(const std::string &camName);
 
 		//!Update a wxtGrid with the properties for a given filter
-		void updateCamPropertyGrid(wxPropertyGrid *g,unsigned int camId) const;
+		void updateCamPropertyGrid(wxCustomPropGrid *g,unsigned int camId) const;
 		
 		//!Return the number of cameras
 		unsigned int numCams() const ;
 
-		//!Set the properties using a key-value result (as obtaed from updatewxPropertyGrid)
+		//!Set the properties using a key-value result (as obtaed from updatewxCustomPropGrid)
 		/*! The return code tells whether to reject or accept the change. 
 		 */
 		bool setCamProperties(size_t camId, 
@@ -360,10 +369,10 @@ class VisController
 		//!Delete a stash using its uniqueID
 		void eraseStash(unsigned int stashID);
 
-		//!Retreive the stash filters
+		//!Retrieve the stash filters
 		void getStashes(std::vector<std::pair<std::string,unsigned int > > &stashes) const;
 
-		//!Retreive a given stash tree by ID
+		//!Retrieve a given stash tree by ID
 		void getStashTree(unsigned int stashId, FilterTree &) const;
 
 		//!Get the number of stashes
diff --git a/src/common/assertion.h b/src/common/assertion.h
index c019461..8716388 100644
--- a/src/common/assertion.h
+++ b/src/common/assertion.h
@@ -80,7 +80,6 @@
 	#define COMPILE_ASSERT(f)
 	#define WARN(f,g) 
 	#define TEST(f,g)
-	#define glError()
 	
 
 #endif
diff --git a/src/common/basics.cpp b/src/common/basics.cpp
index 53af351..afbe3ee 100644
--- a/src/common/basics.cpp
+++ b/src/common/basics.cpp
@@ -32,6 +32,13 @@
 #elif defined __linux__
 	//Needed for getting ram total usage under Linux
 	#include <sys/sysinfo.h>
+
+#endif
+
+//Needed for stat call on posix systems
+#if !defined(__WIN32__) && !defined(__WIN64__)
+#include <sys/types.h>
+#include <sys/stat.h>
 #endif
 
 using std::string;
@@ -44,7 +51,7 @@ const char *DTD_NAME="threeDepict-state.dtd";
 //Program name
 const char *PROGRAM_NAME = "3Depict";
 //Program version
-const char *PROGRAM_VERSION = "0.0.14";
+const char *PROGRAM_VERSION = "0.0.15";
 //Path to font for Default FTGL  font
 const char *FONT_FILE= "FreeSans.ttf";
 
@@ -79,28 +86,6 @@ std::string boolStrEnc(bool b)
 		return "0";
 }
 
-bool rangesOverlap(size_t minA, size_t maxA,
-			size_t minB, size_t maxB)
-{
-
-	ASSERT(minA <= maxA);
-	ASSERT(minB<=maxB);
-
-	// A-  B- A+ 
-	// A- B+ A+
-	if( (minA <= minB && maxA >=minB )
-		|| (minA<=maxB && maxA >=maxB) )
-		return true;
-
-	// B-  A- B+ 
-	// B- A+ B+
-	if(( minB <= minA && maxB >=minA )
-		|| (minB<=maxA && maxB >=maxA) )
-		return true;
-
-	return false;
-
-}
 
 bool dummyCallback(bool)
 {
@@ -280,6 +265,15 @@ string veryFuzzyTimeSince( time_t origTime, time_t nowTime)
 	return TRANS("moments ago");
 }
 
+
+void BoundCube::getBound(Point3D &retBound, unsigned int minMax) const
+{
+	retBound=Point3D(bounds[0][minMax],
+			bounds[1][minMax],
+			bounds[2][minMax]);
+
+}
+
 float BoundCube::getBound(unsigned int bound, unsigned int minMax) const
 {
         ASSERT(bound <3 && minMax < 2);
@@ -867,6 +861,12 @@ unsigned int loadTextData(const char *cpFilename, vector<vector<float> > &dataVe
 	
 	unsigned int num_fields=0;
 
+
+#if !defined(WIN32) && !defined(WIN64)
+	if(isNotDirectory(cpFilename) == false)
+		return ERR_FILE_OPEN;
+#endif
+
 	dataVec.clear();
 	//Open a file in text mode
 	std::ifstream CFile(cpFilename);
@@ -1006,13 +1006,19 @@ unsigned int loadTextStringData(const char *cpFilename, vector<vector<string> >
 {
 	const unsigned int BUFFER_SIZE=4096;
 	
-	dataVec.clear();
+#if !defined(WIN32) && !defined(WIN64)
+	if(isNotDirectory(cpFilename) == false)
+		return ERR_FILE_OPEN;
+#endif
+	
 	//Open a file in text mode
 	std::ifstream CFile(cpFilename);
 
 	if(!CFile)
 		return ERR_FILE_OPEN;
 
+	dataVec.clear();
+
 	char *inBuffer= new char[BUFFER_SIZE];
 	//Grab a line from the file
 	CFile.getline(inBuffer,BUFFER_SIZE);
@@ -1074,4 +1080,21 @@ bool isValidXML(const char *filename)
 }
 #endif
 
+#if !defined(__WIN32__) && !defined(__WIN64)
+	
+bool isNotDirectory(const char *filename)
+{
+	struct stat statbuf;
+
+	if(stat(filename,&statbuf) == -1)
+		return false;
+
+	return (statbuf.st_mode !=S_IFDIR);
+}
 
+bool rmFile(const std::string &filename)
+{
+	return remove(filename.c_str()) == 0;
+}
+
+#endif
diff --git a/src/common/basics.h b/src/common/basics.h
index 776b710..53006ab 100644
--- a/src/common/basics.h
+++ b/src/common/basics.h
@@ -55,9 +55,29 @@ inline int fpeek(FILE *stream)
 	return c;
 }
 
-bool rangesOverlap(size_t minA, size_t maxA,
-			size_t minB, size_t maxB);
+template<class T>
+bool rangesOverlap( const T &minA, const T &maxA,
+			const T &minB, const T &maxB)
+{
+
+	ASSERT(minA <= maxA);
+	ASSERT(minB<=maxB);
+
+	// A-  B- A+ 
+	// A- B+ A+
+	if( (minA <= minB && maxA >=minB )
+		|| (minA<=maxB && maxA >=maxB) )
+		return true;
 
+	// B-  A- B+ 
+	// B- A+ B+
+	if(( minB <= minA && maxB >=minA )
+		|| (minB<=maxA && maxB >=maxA) )
+		return true;
+
+	return false;
+
+}
 
 //!Text file loader errors
 enum
@@ -133,7 +153,7 @@ void tickSpacingsFromFixedNum(float start, float end,
 std::string veryFuzzyTimeSince( time_t origTime, time_t newTime);
 
 
-//!A routine for loading numeric data from a text file
+//!A routine for loading numeric data from a text file. Returns 0 on success
 unsigned int loadTextData(const char *cpFilename, 
 		std::vector<std::vector<float> > &dataVec,
 	       	std::vector<std::string> &header,const char *delim);
@@ -220,6 +240,10 @@ int getTotalRAM();
 //!Get available ram in MB
 size_t getAvailRAM();
 
+//!Determine if a given path is a not a directory, 
+bool isNotDirectory(const char *filename);
+
+bool rmFile(const std::string & filename);
 
 #ifdef DEBUG
 bool isValidXML(const char *filename);
@@ -301,6 +325,8 @@ public:
 
     //Retrieve a specified bound, minMax=0 for min, =1 for max
     float getBound(unsigned int bound, unsigned int minMax) const ;
+    
+    void getBound(Point3D &bound, unsigned int minMax) const ;
     //!Return the centroid 
     Point3D getCentroid() const;
 
@@ -475,32 +501,31 @@ template<class T> size_t randomSelect(std::vector<T> &result, const std::vector<
 		GreaterWithCallback<size_t> gFunctor(callback,50000);
 		std::sort(ticks.begin(),ticks.end(),gFunctor);
 		EqualWithCallback<size_t> eqFunctor(callback,50000);
+
 		std::vector<size_t>::iterator newLast;
 		newLast=std::unique(ticks.begin(),ticks.end());	
 		ticks.erase(newLast,ticks.end());
 
-		std::vector<size_t> moreTicks;
 		//Top up with unique entries
-		while(ticks.size() +moreTicks.size() < numTicksNeeded)
+		//TODO: Overcommit & Discard implementation?
+		// - Should be possible to predict how many we need after collisions, and then overcommit and discard randomly. Removes need to loop-sort like this
+		while(ticks.size() < numTicksNeeded)
 		{
-			size_t index;
-
-			//This is actually not too bad. the collision probability is at most 50%
-			//due the switching behaviour above, for any large number of items 
-			//So this is at worst case nlog(n) (I think)
-			index =(size_t)(rng.genUniformDev()*(float)(source.size()-1));
-			if(!binary_search(ticks.begin(),ticks.end(),index) &&
-				std::find(moreTicks.begin(),moreTicks.end(),index) ==moreTicks.end())
-				moreTicks.push_back(index);
+			size_t moreTicks=numTicksNeeded-ticks.size();
+			for(size_t uk=0;uk<moreTicks;uk++)
+			{
+				//This is actually not too bad. the collision probability is at most 50%
+				//due the switching behaviour above, for any large number of items 
+				//So this is at worst case nlog(n) (I think)
+				ticks.push_back((size_t)(rng.genUniformDev()*(float)(source.size()-1)));
+	
+			}
 
+			std::sort(ticks.begin(),ticks.end(),gFunctor);
+			newLast=std::unique(ticks.begin(),ticks.end(),eqFunctor);	
+			ticks.erase(newLast,ticks.end());
 		}
 
-		ticks.reserve(numTicksNeeded);
-		for(size_t ui=0;ui<moreTicks.size();ui++)
-			ticks.push_back(moreTicks[ui]);
-
-		moreTicks.clear();
-
 		ASSERT(ticks.size() == numTicksNeeded);
 		//---------
 		
@@ -637,6 +662,7 @@ template<class T> size_t randomDigitSelection(std::vector<T> &result, const size
 			numTicksNeeded=max-num;
 
 		//Randomly selected items 
+		//TODO: Benchmark against set<> implementation
 		//---------
 		std::vector<size_t> ticks;
 		ticks.resize(numTicksNeeded);
@@ -653,27 +679,25 @@ template<class T> size_t randomDigitSelection(std::vector<T> &result, const size
 		std::vector<size_t>::iterator itLast;
 		itLast=std::unique(ticks.begin(),ticks.end(),eqFunctor);	
 		ticks.erase(itLast,ticks.end());
-		std::vector<size_t> moreTicks;
+		
 		//Top up with unique entries
-		while(ticks.size() +moreTicks.size() < numTicksNeeded)
+		while(ticks.size() < numTicksNeeded)
 		{
-			size_t index;
-
-			//This is actually not too bad. the collision probability is at most 50%
-			//due the switching behaviour above, for any large number of items 
-			//So this is at worst case nlog(n) (I think)
-			index =(size_t)(rng.genUniformDev()*(float)(max-1));
-			if(!binary_search(ticks.begin(),ticks.end(),index) &&
-				std::find(moreTicks.begin(),moreTicks.end(),index) ==moreTicks.end())
-				moreTicks.push_back(index);
+			size_t moreTicks=numTicksNeeded-ticks.size();
+			for(size_t uk=0;uk<moreTicks;uk++)
+			{
+				//This is actually not too bad. the collision probability is at most 50%
+				//due the switching behaviour above, for any large number of items 
+				//So this is at worst case nlog(n) (I think)
+				ticks.push_back((size_t)(rng.genUniformDev()*(float)(max-1)));
+	
+			}
 
+			std::sort(ticks.begin(),ticks.end(),gFunctor);
+			itLast=std::unique(ticks.begin(),ticks.end(),eqFunctor);	
+			ticks.erase(itLast,ticks.end());
 		}
 
-		ticks.reserve(numTicksNeeded);
-		for(size_t ui=0;ui<moreTicks.size();ui++)
-			ticks.push_back(moreTicks[ui]);
-
-		moreTicks.clear();
 
 		ASSERT(ticks.size() == numTicksNeeded);
 		//---------
@@ -762,4 +786,25 @@ template<class T> size_t randomDigitSelection(std::vector<T> &result, const size
 	return num;
 }
 
+//Remove elements from the vector, without preserving order
+// the pattern of removal will be unique with a given kill pattern
+//Remove selected elements from vector, preserving order
+template<class T>
+void vectorMultiErase(std::vector<T> &vec, const std::vector<bool> &wantKill)
+{
+	ASSERT(vec.size() == wantKill.size());
+
+	if(!vec.size())
+		return;
+	size_t shift=0;	
+	for(size_t ui=0;ui<vec.size();ui++)
+	{
+		if(wantKill[ui])
+			shift++;
+		else if(shift)
+			vec[ui-shift] = vec[ui];
+	}
+	vec.resize(vec.size()-shift);
+}
+
 #endif
diff --git a/src/common/colourmap.cpp b/src/common/colourmap.cpp
index 7472507..5e96673 100644
--- a/src/common/colourmap.cpp
+++ b/src/common/colourmap.cpp
@@ -191,12 +191,18 @@ void grayColorMap(unsigned char *rgb,float value,float min,float max)
   rgb[0]=rgb[1]=rgb[2]=(unsigned char)(255*value/max);
 }
 
-void colourMapWrap(unsigned int mapID,unsigned char *rgb, float v, float min, float max)
+void colourMapWrap(unsigned int mapID,unsigned char *rgb, float v, 
+				float min, float max, bool reverse)
+
 {
 	//Colour functions assume  positive value, so remap
 	v= v-min;
 	max-=min;
 	min=0;
+
+	if(reverse)
+		v= max-v;
+
 	//Select the desired colour map
 	switch(mapID)
 	{
@@ -226,6 +232,8 @@ void colourMapWrap(unsigned int mapID,unsigned char *rgb, float v, float min, fl
 			break;
 	}
 
+
+
 }
 
 std::string getColourMapName(unsigned int mapID)
diff --git a/src/common/colourmap.h b/src/common/colourmap.h
index 1ebd6cc..d336f1d 100644
--- a/src/common/colourmap.h
+++ b/src/common/colourmap.h
@@ -32,7 +32,8 @@ const unsigned int NUM_COLOURMAPS=8;
  *
  * returns char in 0->255 range 
  */
-void colourMapWrap(unsigned int mapID,unsigned char *rgb, float value, float min,float max);
+void colourMapWrap(unsigned int mapID,unsigned char *rgb, 
+		float value, float min,float max,bool reverse);
 
 std::string getColourMapName(unsigned int mapID);
 
diff --git a/src/common/constants.h b/src/common/constants.h
index ee3ddbc..ed33513 100644
--- a/src/common/constants.h
+++ b/src/common/constants.h
@@ -25,6 +25,11 @@
 	#define HAVE_CPP1X 1
 #endif
 
+//Hack-ish variable for minimal size of data to execute
+// openMP conditionals as parallel regions. This is highly empirical!
+const unsigned int OPENMP_MIN_DATASIZE=1000;
+
+
 enum
 {
   PLOT_TRACE_LINES=0,
@@ -75,9 +80,9 @@ enum
 //!Movement types for plot
 enum
 {
-	REGION_MOVE_EXTEND_XMINUS,
-	REGION_MOVE_TRANSLATE_X,
-	REGION_MOVE_EXTEND_XPLUS
+	REGION_MOVE_EXTEND_XMINUS, //Moving (extend/shrink) lower bound of region
+	REGION_MOVE_TRANSLATE_X, // Moving regoin
+	REGION_MOVE_EXTEND_XPLUS, // Moving (extend/shrink) upper bound
 };
 
 
diff --git a/src/common/mathfuncs.h b/src/common/mathfuncs.h
index 69640a4..d71b394 100644
--- a/src/common/mathfuncs.h
+++ b/src/common/mathfuncs.h
@@ -152,7 +152,6 @@ class Point3D
 #endif
 };
 
-
 //IMPORTANT!!!
 //===============
 //Do NOT use multiple instances of this in your code
diff --git a/src/common/pngread.c b/src/common/pngread.c
index b11088f..6f03bf1 100644
--- a/src/common/pngread.c
+++ b/src/common/pngread.c
@@ -42,11 +42,8 @@ int check_if_png(const char *file_name, FILE **fp, unsigned int bytes_to_check)
    return(!png_sig_cmp((png_byte*)buf, (png_size_t)0, bytes_to_check));
 }
 
-/* Read a PNG file.  You may want to return an error code if the read
- * fails (depending upon the failure).  There are two "prototypes" given
- * here - one where we are given the filename, and we need to open the
- * file, and the other where we are given an open file (possibly with
- * some or all of the magic bytes read - see comments above).
+/* Read a PNG file. Returns 0 on success. Must destroy output with 
+ * free_pngrowpointers
  */
 int read_png(FILE *fp, unsigned int sig_read, png_bytep **row_pointers,
              png_uint_32 *width, png_uint_32 *height)  /* file is already open */
@@ -228,8 +225,7 @@ int read_png(FILE *fp, unsigned int sig_read, png_bytep **row_pointers,
 
    for (row = 0; row < *height; row++)
    {
-      (*row_pointers)[row] = (png_byte*)png_malloc(png_ptr, png_get_rowbytes(png_ptr,
-         info_ptr));
+      (*row_pointers)[row] = (png_byte*)malloc(png_get_rowbytes(png_ptr,info_ptr));
    }
 
    /* Read the entire image in one go */
@@ -249,6 +245,15 @@ int read_png(FILE *fp, unsigned int sig_read, png_bytep **row_pointers,
    return (0);
 }
 
+void free_pngrowpointers(png_bytep *row_pointers, png_uint_32 height)  
+{
+   unsigned int row;
+   for (row = 0; row < height; row++)
+	free(row_pointers[row]); //FIXME : Should this be png_free ?? 
+   
+   free(row_pointers);
+}
+
 #ifdef __cplusplus 
 	}; 
 #endif
diff --git a/src/common/pngread.h b/src/common/pngread.h
index fdf8af6..8c4d314 100644
--- a/src/common/pngread.h
+++ b/src/common/pngread.h
@@ -36,6 +36,7 @@
 
 int check_if_png(const char*, FILE**, unsigned int);
 int read_png(FILE*, unsigned int, png_bytep**, png_uint_32*, png_uint_32*);
+void free_pngrowpointers(png_bytep *row_pointers, png_uint_32 height); 
 
 
 #ifdef __cplusplus 
diff --git a/src/common/stringFuncs.cpp b/src/common/stringFuncs.cpp
index b797b76..b109b06 100644
--- a/src/common/stringFuncs.cpp
+++ b/src/common/stringFuncs.cpp
@@ -125,6 +125,21 @@ bool isVersionNumberString(const std::string &s)
 }
 
 
+bool boolStrDec(const std::string &s, bool &b)
+{
+	std::string tmp;
+	tmp=stripWhite(s);
+
+	if(tmp == "0")
+		b=false;
+	else if(tmp == "1")
+		b=true;
+	else 
+		return false; // Failed to decode
+
+	return true;
+}
+
 std::string onlyFilename( const std::string& path) 
 {
 #if defined(_WIN32) || defined(_WIN64)
@@ -193,7 +208,7 @@ bool genRandomFilename(std::string &s,bool seedRand)
 
 	//some valid chars for generating random strings
 	static const char validChars[] =
-	    "0123456789_-"
+	    "0123456789_"
 	    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 	    "abcdefghijklmnopqrstuvwxyz";
 
diff --git a/src/common/stringFuncs.h b/src/common/stringFuncs.h
index a74b8fb..f36df88 100644
--- a/src/common/stringFuncs.h
+++ b/src/common/stringFuncs.h
@@ -29,6 +29,10 @@ bool genRandomFilename(std::string &s,bool timerInitRand=true);
 //Convert a boolean to "1" or "0"
 std::string boolStrEnc(bool b);
 
+//Convert an input string "0" or "1" into its boolean value. 
+//	Whitespace is stripped from either end. If string cannot be understood, returns false
+bool boolStrDec(const std::string &s,bool &result);
+
 //!Generate string that can be parsed by wxPropertyGrid for combo control
 //String format is CHOICEID:id1|string 1,id2|string 2,id3|string 3,.....,idN|string_N
 // where id1->idN are integers
diff --git a/src/common/voxels.h b/src/common/voxels.h
index ee8c11b..0e63148 100644
--- a/src/common/voxels.h
+++ b/src/common/voxels.h
@@ -124,6 +124,9 @@ template<class T> class Voxels
 	
 		bool (*callback)(bool);
 			
+
+		void localPaddedConvolve(long long ui,long long uj, long long uk, 
+			const Voxels<T> &kernel,Voxels<T> &result, unsigned int mode) const;
 	public:
 		//!Constructor.
 		Voxels();
@@ -1265,21 +1268,55 @@ void Voxels<T>::swap(Voxels<T> &kernel)
 	std::swap(minBound,kernel.minBound);
 }
 
+//Helper function for performing convolution
 template<class T>
-size_t Voxels<T>::convolve(const Voxels<T> &kernel, Voxels<T> &result,  size_t boundMode) const
+void Voxels<T>::localPaddedConvolve(long long ui,long long uj, long long uk, 
+			const Voxels<T> &kernel,Voxels<T> &result, unsigned int mode) const
 {
-	ASSERT(voxels.size());
-	ASSERT(callback);
+	ASSERT(result.binCount[0] == binCount[0] && result.binCount[1]==binCount[1]
+		&& result.binCount[2] == binCount[2]);
 
-	//Check the kernel can fit within this datasest
+	long long halfX,halfY,halfZ;
+#ifdef DEBUG
+	for(size_t i=0;i<3;i++)
+	{
+		ASSERT(kernel.binCount[i] &1);
+	}
+#endif
+	halfX=kernel.binCount[0]/2; halfY=kernel.binCount[1]/2;halfZ=kernel.binCount[2]/2;
+
+	T tally(0.0);
+	for(size_t ul=0; ul<kernel.binCount[0]; ul++)
+	{
+	for(size_t um=0; um<kernel.binCount[1]; um++)
+	{
+	for(size_t un=0; un<kernel.binCount[2]; un++)
+	{
+		tally+=getPaddedData(ui+ul-halfX,uj+um-halfY,uk+un-halfZ,mode)*
+				kernel.getData(ul,um,un);
+	}
+	}
+	}
+
+	result.setData(ui,uj,uk,tally);	
+}
+
+template<typename T>
+size_t Voxels<T>::convolve(const Voxels<T> &kernel, Voxels<T> &result,  size_t boundMode)  const
+{
+
+	//Check the kernel can fit within this est
 	size_t x,y,z;
 	kernel.getSize(x,y,z);
 	if(binCount[0] <x || binCount[1]< y || binCount[2] < z)
 		return 1;
+	
+	long long halfX,halfY,halfZ;
+	halfX=kernel.binCount[0]/2; halfY=kernel.binCount[1]/2;halfZ=kernel.binCount[2]/2;
 
 	//Loop through all of the voxel elements, setting the
 	//result voxels to the convolution of the template
-	//with the data 
+	//with the data
 
 
 	switch(boundMode)
@@ -1301,8 +1338,9 @@ size_t Voxels<T>::convolve(const Voxels<T> &kernel, Voxels<T> &result,  size_t b
 			if(result.resize(sX,sY,sZ,resultMinBound, resultMaxBound))
 				return VOXELS_OUT_OF_MEMORY;
 
-			//loop through each data element
+			//loop through each element
 			//Forgive the poor indenting, but the looping is very deep
+			//FIXME: there is a shift in the output when doing this?
 			for (size_t ui=0;ui<(size_t)(binCount[0]-x+1); ui++)
 			{
 			for (size_t uj=0;uj<binCount[1]-y+1; uj++)
@@ -1330,12 +1368,130 @@ size_t Voxels<T>::convolve(const Voxels<T> &kernel, Voxels<T> &result,  size_t b
 			}
 			
 			}
-
 			break;
 		}
+		case BOUND_MIRROR:
 		case BOUND_HOLD:
 		case BOUND_DERIV_HOLD:
-		case BOUND_MIRROR:
+		{
+			//Calculate the bounding size of the resultant box
+			//Set up the result box
+			if(result.resize(binCount[0],binCount[1],binCount[2],minBound,maxBound))
+				return VOXELS_OUT_OF_MEMORY;
+
+			//loop through each element in the interior
+			//Forgive the poor indenting, but the looping is very deep
+			{
+			for (long long ui=halfX;ui<(size_t)(binCount[0]-x+1); ui++)
+			{
+			for (long long uj=halfY;uj<binCount[1]-y+1; uj++)
+			{
+			for (long long uk=halfZ;uk<binCount[2]-z+1; uk++)
+			{
+				T tally;
+				tally=T(0.0);
+
+				//Convolve this element with the kernel 
+				for(long long ul=0; ul<x; ul++)
+				{
+				for(long long um=0; um<y; um++)
+				{
+				for(long long un=0; un<z; un++)
+				{
+					tally+=(getData(ui+ ul-halfX,uj + um -halfY,uk + un -halfZ))*
+							kernel.getData(ul,um,un);
+				}
+				}
+				}
+
+				result.setData(ui,uj,uk,tally);	
+			}
+			}
+			}
+			}
+
+			//Lower Boundaries
+			//----------
+			//x- boundary
+			for(long long ui=0;ui<halfX;ui++)
+			{
+			for(long long uj=0;uj<binCount[1];uj++)
+			{
+			for(long long uk=0;uk<binCount[2];uk++)
+			{
+				localPaddedConvolve(ui,uj,uk,kernel,result,boundMode);
+			}
+			}
+			}
+			
+			//y- boundary
+			for(long long ui=0;ui<binCount[0];ui++)
+			{
+			for(long long uj=0;uj<halfY;uj++)
+			{
+			for(long long uk=0;uk<binCount[2];uk++)
+			{
+				localPaddedConvolve(ui,uj,uk,kernel,result,boundMode);
+			}
+			}
+			}
+			
+			//z- boundary
+			for(long long ui=0;ui<binCount[0];ui++)
+			{
+			for(long long uj=0;uj<binCount[1];uj++)
+			{
+			for(long long uk=0;uk<halfZ;uk++)
+			{
+				localPaddedConvolve(ui,uj,uk,kernel,result,boundMode);
+			}
+			}
+			}
+			//----------
+	
+			//Upper boundary
+			//----------
+			//x+ boundary
+			for(long long ui=binCount[0]-x+1;ui<binCount[0];ui++)
+			{
+			for(long long uj=halfY;uj<binCount[1];uj++)
+			{
+			for(long long uk=halfZ;uk<binCount[2];uk++)
+			{	
+				localPaddedConvolve(ui,uj,uk,kernel,result,boundMode);
+			}
+			}
+			}
+
+			//y+ boundary
+			for(long long ui=halfX;ui<binCount[0];ui++)
+			{
+			for(long long uj=binCount[1]-y+1;uj<binCount[1];uj++)
+			{
+			for(long long uk=halfZ;uk<binCount[2];uk++)
+			{
+				localPaddedConvolve(ui,uj,uk,kernel,result,boundMode);
+			}
+			}
+			}
+			
+			//z+ boundary
+			for(long long ui=halfX;ui<binCount[0];ui++)
+			{
+			for(long long uj=halfY;uj<binCount[1];uj++)
+			{
+			for(long long uk=binCount[2]-z+1;uk<binCount[2];uk++)
+			{
+				localPaddedConvolve(ui,uj,uk,kernel,result,boundMode);
+			}
+			}
+			}
+			//----------
+			
+
+
+			break;
+		}
 		default:
 			ASSERT(false);
 			return 2;
diff --git a/src/common/xmlHelper.h b/src/common/xmlHelper.h
index bc2055e..9412512 100644
--- a/src/common/xmlHelper.h
+++ b/src/common/xmlHelper.h
@@ -33,6 +33,12 @@ using std::string;
 
 #include "common/basics.h"
 
+enum
+{
+	PROP_PARSE_ERR = 1,
+	PROP_BAD_ATT
+};
+
 //These functions return nonzero on failure,
 //zero on success
 //be warned that the node WILL be modified.
@@ -77,6 +83,29 @@ bool XMLGetNextElemAttrib(xmlNodePtr &nodePtr, T &v, const char *nodeName, const
 }
 
 
+//Returns 0 if successful, non zero if there is a property failure, or if the property is empty
+template<class T> unsigned int XMLHelpGetProp(T &prop,xmlNodePtr node, string propName)
+{
+	xmlChar *xmlString;
+
+	//grab the xml property
+	xmlString = xmlGetProp(node,(const xmlChar *)propName.c_str());
+
+	//Check string contents	
+	if(!xmlString)
+		return PROP_PARSE_ERR;
+
+	if(stream_cast(prop,xmlString))
+	{
+		xmlFree(xmlString);
+		return PROP_BAD_ATT;
+	}
+			
+	xmlFree(xmlString);
+
+	return 0;
+}
+
 //Returns false on failure 
 //Do not use on validly whitespace containing XML
 template<class T>
diff --git a/src/gl/cameras.cpp b/src/gl/cameras.cpp
index 909a14c..ba68a87 100644
--- a/src/gl/cameras.cpp
+++ b/src/gl/cameras.cpp
@@ -30,23 +30,21 @@
 #endif
 #include "common/translation.h"
 
+#include "glDebug.h"
+
+#include <iostream>
+
+
+#include <cstdlib>
+
+using std::cerr;
+using std::endl;
 
 //TODO: FIXME: Orthogonal camera zooming is very slow, compared to 
 // perspective camera dolly. Check equations of motion for equivalence
 const float ORTHO_SPEED_HACK=1.05;
 
 
-//!Key types for property setting and getting via property grids
-enum
-{
-	KEY_LOOKAT_LOCK,
-	KEY_LOOKAT_ORIGIN,
-	KEY_LOOKAT_TARGET,
-	KEY_LOOKAT_UPDIRECTION,
-	KEY_LOOKAT_FOV,
-	KEY_LOOKAT_PROJECTIONMODE,
-	KEY_LOOKAT_ORTHOSCALE
-};
 
 
 
@@ -207,49 +205,6 @@ Point3D CameraLookAt::getTarget() const
 	return target;
 }
 
-void CameraLookAt::doPerspCalcs(float aspectRatio, const BoundCube &bc,bool loadIdentity) const
-{
-	ASSERT(projectionMode == PROJECTION_MODE_PERSPECTIVE);
-
-	glMatrixMode (GL_PROJECTION);
-	if(loadIdentity)
-		glLoadIdentity();
-
-	//As the far plane is dynamically computed, similarly 
-	//bring the near plane to a constant factor of the far plane
-	// that way, when the far plane comes in, so should the near plane
-	// this factor is only somewhat arbitrary, as it is based upon the
-	// number of significant figures in a 32 bit float
-	const float NEAR_PLANE_FACTOR=1.0f/10000.0f; 
-	
-	farPlane = 1.5f*bc.getMaxDistanceToBox(origin);
-	gluPerspective(fovAngle/2.0,aspectRatio,farPlane*NEAR_PLANE_FACTOR,farPlane);
-	glMatrixMode(GL_MODELVIEW);
-
-	glTranslatef(origin[0],origin[1],origin[2]);
-
-	//As gluperspective defaults to viewing down the 0,0,-1 axis
-	//we must rotate the scene such that the view direction
-	//is brought into line with the default view vector
-	Point3D rotVec,defaultDir(0,0,-1.0f);
-	float rotAngle;
-
-
-	rotVec = viewDirection.crossProd(defaultDir);
-
-
-	rotAngle = 180.0f/M_PI * viewDirection.angle(defaultDir);
-
-	glRotatef(-rotAngle,rotVec[0],rotVec[1],rotVec[2]);
-
-	//Camera roll
-	//Default "up" direction
-	defaultDir[2] = 1.0f;
-	rotVec = upDirection.crossProd(defaultDir);
-	rotAngle = 180.0f/M_PI * upDirection.angle(defaultDir);
-	glRotatef(-rotAngle, rotVec[0], rotVec[1],rotVec[2]);
-
-}
 
 void CameraLookAt::setOrigin(const Point3D &newOrigin)
 {
@@ -291,71 +246,25 @@ void CameraLookAt::apply(float aspect, const BoundCube &bc, bool loadIdentity) c
 	}
 
 	ASSERT(origin.sqrDist(target)>std::numeric_limits<float>::epsilon());
-	gluLookAt(origin[0],origin[1],origin[2],
-				target[0],target[1],target[2],
-				upDirection[0],upDirection[1],upDirection[2]);
-}
-
-void CameraLookAt::apply(float aspect,const BoundCube &b,bool loadIdentity,
-						float leftRestrict,float rightRestrict, 
-						float bottomRestrict,float topRestrict) const
-{
-	ASSERT(leftRestrict < rightRestrict);
-	ASSERT(bottomRestrict< topRestrict);
-
-	glMatrixMode (GL_PROJECTION);
 	if(loadIdentity)
 		glLoadIdentity();
+	lookAt();
+}
 
-	farPlane = 1.5*b.getMaxDistanceToBox(origin);
-	switch(projectionMode)
-	{
-
-		case PROJECTION_MODE_PERSPECTIVE:
-		{
-			float width,height;
-			height = tan(fovAngle/2.0*M_PI/180.0f)*nearPlane;
-			width= height*aspect;
-			
-
-			//Frustum uses eye coordinates.	
-			if(fabs(frustumDistortion) < std::numeric_limits<float>::epsilon())
-				glFrustum(leftRestrict*width,rightRestrict*width,bottomRestrict*height,
-								topRestrict*height,nearPlane,farPlane);
-			else
-			{
-				float workingDist=farPlane;//sqrtf((target-origin).sqrMag());
-				glFrustum(leftRestrict*width+frustumDistortion*nearPlane/workingDist,
-						rightRestrict*width+frustumDistortion*nearPlane/workingDist,
-						bottomRestrict*height,	topRestrict*height,nearPlane,farPlane);
-			}
-			break;
-		}
-		case PROJECTION_MODE_ORTHOGONAL:
-		{
-			float l,r,b,t;
-
-			//FIXME:I have no idea why it is 2x...AFAIK it should just be ONE.
-			//but this works, and one does not.
-			l = 2*leftRestrict*orthoScale*aspect;
-			r= 2*rightRestrict*orthoScale*aspect;
-			b= 2*bottomRestrict*orthoScale;
-			t = 2*topRestrict*orthoScale;
-
-			glOrtho(l,r,b,t,nearPlane,farPlane);
-			break;
-		}
-		default:
-			ASSERT(false);
-	}
-	
-	glMatrixMode(GL_MODELVIEW);
-
-	ASSERT(origin.sqrDist(target)>std::numeric_limits<float>::epsilon());
+void CameraLookAt::lookAt() const
+{
+	//This check should be valid, but it causes problems at startup on Wine,
+	// for which I cannot track down the cause
+#if defined(DEBUG) && !(defined(__WIN32__) || defined(__WIN64__))
+	GLint mode;
+	glGetIntegerv( GL_MATRIX_MODE, &mode);
+	ASSERT(mode == GL_MODELVIEW || mode == GL_MODELVIEW_MATRIX);
+#endif
+	//Set up the "look-at" matrix onto the current matrix mode.
+	// this causes the camera to 
 	gluLookAt(origin[0],origin[1],origin[2],
 				target[0],target[1],target[2],
 				upDirection[0],upDirection[1],upDirection[2]);
-	
 }
 
 void CameraLookAt::translate(float moveLR, float moveUD)
@@ -690,23 +599,23 @@ void CameraLookAt::getProperties(CameraProperties &p) const
 		s.push_back(std::make_pair(TRANS("Lock"),"0"));
 
 	type.push_back(PROPERTY_TYPE_BOOL);
-	keys.push_back(KEY_LOOKAT_LOCK);
+	keys.push_back(CAMERA_KEY_LOOKAT_LOCK);
 
 	string ptStr;
 	stream_cast(ptStr,origin);
 	s.push_back(std::make_pair(TRANS("Origin"), ptStr));
 	type.push_back(PROPERTY_TYPE_POINT3D);
-	keys.push_back(KEY_LOOKAT_ORIGIN);
+	keys.push_back(CAMERA_KEY_LOOKAT_ORIGIN);
 	
 	stream_cast(ptStr,target);
 	s.push_back(std::make_pair(TRANS("Target"), ptStr));
 	type.push_back(PROPERTY_TYPE_POINT3D);
-	keys.push_back(KEY_LOOKAT_TARGET);
+	keys.push_back(CAMERA_KEY_LOOKAT_TARGET);
 	
 	stream_cast(ptStr,upDirection);
 	s.push_back(std::make_pair(TRANS("Up Dir."), ptStr));
 	type.push_back(PROPERTY_TYPE_POINT3D);
-	keys.push_back(KEY_LOOKAT_UPDIRECTION);
+	keys.push_back(CAMERA_KEY_LOOKAT_UPDIRECTION);
 
 	std::vector<std::pair<unsigned int,string> > choices;
 	string tmp;
@@ -720,7 +629,7 @@ void CameraLookAt::getProperties(CameraProperties &p) const
 	
 	s.push_back(std::make_pair(TRANS("Projection"), tmp));
 	type.push_back(PROPERTY_TYPE_CHOICE);
-	keys.push_back(KEY_LOOKAT_PROJECTIONMODE);
+	keys.push_back(CAMERA_KEY_LOOKAT_PROJECTIONMODE);
 
 	switch(projectionMode)
 	{
@@ -728,13 +637,13 @@ void CameraLookAt::getProperties(CameraProperties &p) const
 			stream_cast(tmp,fovAngle);
 			s.push_back(std::make_pair(TRANS("Field of View (deg)"), tmp));
 			type.push_back(PROPERTY_TYPE_REAL);
-			keys.push_back(KEY_LOOKAT_FOV);
+			keys.push_back(CAMERA_KEY_LOOKAT_FOV);
 			break;
 		case PROJECTION_MODE_ORTHOGONAL:
 			stream_cast(tmp,orthoScale);
 			s.push_back(std::make_pair(TRANS("View size"), tmp));
 			type.push_back(PROPERTY_TYPE_REAL);
-			keys.push_back(KEY_LOOKAT_ORTHOSCALE);
+			keys.push_back(CAMERA_KEY_LOOKAT_ORTHOSCALE);
 			break;
 
 	}
@@ -749,7 +658,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 
 	switch(key)
 	{
-		case KEY_LOOKAT_LOCK:
+		case CAMERA_KEY_LOOKAT_LOCK:
 		{
 			if(value == "1")
 				lock=true;
@@ -760,7 +669,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 
 			break;
 		}
-		case KEY_LOOKAT_ORIGIN:
+		case CAMERA_KEY_LOOKAT_ORIGIN:
 		{
 			Point3D newPt;
 			if(!newPt.parse(value))
@@ -774,7 +683,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 
 			break;
 		}
-		case KEY_LOOKAT_TARGET:
+		case CAMERA_KEY_LOOKAT_TARGET:
 		{
 			Point3D newPt;
 			if(!newPt.parse(value))
@@ -787,7 +696,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 
 			break;
 		}
-		case KEY_LOOKAT_UPDIRECTION:
+		case CAMERA_KEY_LOOKAT_UPDIRECTION:
 		{
 			Point3D newDir;
 			if(!newDir.parse(value))
@@ -804,7 +713,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 			recomputeUpDirection();
 			break;
 		}
-		case KEY_LOOKAT_FOV:
+		case CAMERA_KEY_LOOKAT_FOV:
 		{
 			float newFOV;
 			if(stream_cast(newFOV,value))
@@ -813,7 +722,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 			fovAngle=newFOV;
 			break;
 		}
-		case KEY_LOOKAT_PROJECTIONMODE:
+		case CAMERA_KEY_LOOKAT_PROJECTIONMODE:
 		{
 			size_t ltmp;
 			if(value == TRANS("Perspective"))
@@ -843,7 +752,7 @@ bool CameraLookAt::setProperty(unsigned int key, const string &value)
 			
 			break;
 		}
-		case KEY_LOOKAT_ORTHOSCALE:
+		case CAMERA_KEY_LOOKAT_ORTHOSCALE:
 		{
 			float newOrthoScale;
 			if(stream_cast(newOrthoScale,value))
@@ -889,12 +798,14 @@ bool CameraLookAt::writeState(std::ostream &f, unsigned int format,
 			f<< tabs(nTabs+1) <<  "<fovangle value=\"" << fovAngle << "\"/>" << endl;
 			f<< tabs(nTabs+1) <<  "<nearplane value=\"" << nearPlane << "\"/>" << endl;
 			f << tabs(nTabs) << "</persplookat>" << endl;
+			break;
 
-			return true;
 		}
 		default:
 			ASSERT(false);
 	}
+	
+	return true;
 }
 		
 bool CameraLookAt::readState(xmlNodePtr nodePtr)
diff --git a/src/gl/cameras.h b/src/gl/cameras.h
index 6a327db..1158fce 100644
--- a/src/gl/cameras.h
+++ b/src/gl/cameras.h
@@ -44,6 +44,18 @@ enum
 	PROJECTION_MODE_ENUM_END //not a valid mode.
 };
 
+//!Key types for property setting and getting properties
+enum
+{
+	CAMERA_KEY_LOOKAT_LOCK,
+	CAMERA_KEY_LOOKAT_ORIGIN,
+	CAMERA_KEY_LOOKAT_TARGET,
+	CAMERA_KEY_LOOKAT_UPDIRECTION,
+	CAMERA_KEY_LOOKAT_FOV,
+	CAMERA_KEY_LOOKAT_PROJECTIONMODE,
+	CAMERA_KEY_LOOKAT_ORTHOSCALE
+};
+
 class CameraProperties 
 {
 	public:
@@ -100,6 +112,8 @@ class Camera
 
 		//!return the projection mode
 		unsigned int getProjectionMode() const{ return projectionMode;};
+
+		float getOrthoScale() const { return orthoScale; }
 		
 		//!Set the camera's position
 		virtual void setOrigin(const Point3D &);
@@ -133,10 +147,6 @@ class Camera
 		//!Applies the camera settings to openGL. Ensures the far planes
 		//is set to make the whole scene visible
 		virtual void apply(float outputRatio,const BoundCube &b,bool loadIdentity=true) const=0;
-		//!Applies the camera settings to openGL, restricting the viewport (range (-1, 1))
-		virtual void apply(float outputRatio,const BoundCube &b,bool loadIdentity,
-						float leftRestrict,float rightRestrict, 
-						float bottomRestrict, float topRestrict) const=0;
 		//!Ensures that the given boundingbox should look nice, and be visible
 		virtual void ensureVisible(const BoundCube &b, unsigned int face=3)=0;
 
@@ -175,9 +185,6 @@ class CameraLookAt : public Camera
 		//!Distort to the viewing frustum. (eg for stero) ( a frustum is a rectangular pyramid with the top cut off)
 		float frustumDistortion;
 
-		//!Do the perspective calculations
-		void doPerspCalcs(float aspect,const BoundCube &bc,bool loadIdentity) const;
-	
 	public:
 		//!Constructor
 		CameraLookAt();
@@ -198,9 +205,13 @@ class CameraLookAt : public Camera
 		//!Get the camera's FOV angle (full angle across)
 		float getFOV() const {return fovAngle;}
 
+		float getNearPlane() const { return nearPlane; }
+
 		//!Applies the view transform 
 		void apply(float outAspect, const BoundCube &boundCube,bool loadIdentity=true) const;
-		
+	
+		//!Only apply the look-at opengl transform
+		void lookAt() const;
 		//!Do a forwards "dolly",where the camera moves along its viewing axis
 		void forwardsDolly(float dollyAmount);
 
@@ -244,10 +255,6 @@ class CameraLookAt : public Camera
 		//!Read the state of the camera
 		bool readState(xmlNodePtr nodePtr) ;
 		
-		//!Apply, restricting viewport to subresgion	
-		virtual void apply(float outputRatio,const BoundCube &b,bool loadIdentity,
-						float leftRestrict,float rightRestrict, 
-						float topRestrict, float bottomRestrict) const;
 
 		float getViewWidth(float depth) const;
 
diff --git a/src/gl/drawables.cpp b/src/gl/drawables.cpp
index 5b9bdf9..66059b1 100644
--- a/src/gl/drawables.cpp
+++ b/src/gl/drawables.cpp
@@ -32,6 +32,11 @@ const float DEPTH_SORT_REORDER_EPSILON = 1e-2;
 //Static class variables
 //====
 const Camera *DrawableObj::curCamera = 0;
+
+float DrawableObj::backgroundR;
+float DrawableObj::backgroundG;
+float DrawableObj::backgroundB;
+
 bool DrawableObj::useAlphaBlend;
 TexturePool *DrawableObj::texPool;
 
@@ -141,6 +146,11 @@ DrawPoint::~DrawPoint()
 {
 }
 
+DrawableObj* DrawPoint::clone() const
+{
+	DrawPoint *d = new DrawPoint(*this);
+	return d;
+}
 
 
 
@@ -178,6 +188,11 @@ DrawVector::~DrawVector()
 {
 }
 
+DrawableObj* DrawVector::clone() const
+{
+	DrawVector *d = new DrawVector(*this);
+	return d;
+}
 
 void DrawVector::getBoundingBox(BoundCube &b) const 
 {
@@ -407,6 +422,13 @@ DrawTriangle::~DrawTriangle()
 {
 }
 
+
+DrawableObj* DrawTriangle::clone() const
+{
+	DrawTriangle *d = new DrawTriangle(*this);
+	return d;
+}
+
 void DrawTriangle::setVertex(unsigned int ui, const Point3D &pt)
 {
 	ASSERT(ui < 3);
@@ -430,6 +452,13 @@ void DrawTriangle::draw() const
 	glEnd();
 }
 
+DrawableObj* DrawQuad::clone() const
+{
+	DrawQuad *d = new DrawQuad(*this);
+	return d;
+}
+
+
 void DrawQuad::getBoundingBox(BoundCube &b) const
 {
 	b.setBounds(vertices,4);
@@ -543,7 +572,7 @@ void DrawTexturedQuad::rebindTexture()
 {
 	ASSERT(texPool);
 	ASSERT(textureData);
-	if(textureId == -1)
+	if(textureId == (unsigned int)-1)
 		texPool->genTexID(textureId);
 	
 	//Construc the texture
@@ -583,7 +612,6 @@ DrawSphere::~DrawSphere()
 }
 
 
-
 void DrawSphere::getBoundingBox(BoundCube &b) const
 {
 	for(unsigned int ui=0;ui<3;ui++)
@@ -844,6 +872,13 @@ DrawManyPoints::~DrawManyPoints()
 {
 }
 
+
+DrawableObj* DrawManyPoints::clone() const
+{
+	DrawManyPoints *d = new DrawManyPoints(*this);
+	return d;
+}
+
 void DrawManyPoints::getBoundingBox(BoundCube &b) const
 {
 
@@ -1338,6 +1373,12 @@ DrawRectPrism::~DrawRectPrism()
 {
 }
 
+DrawableObj *DrawRectPrism::clone() const
+{
+	DrawRectPrism *dR= new DrawRectPrism(*this);
+	return dR;
+}
+
 void DrawRectPrism::getBoundingBox(BoundCube &b) const
 {
 	b.setBounds(pMin[0],pMin[1],pMin[2],
@@ -1704,9 +1745,35 @@ void DrawColourBarOverlay::draw() const
 
 	glEnd();
 
+	//Perform luminence check on background to try to create most appropriate
+	// colour
+	//-------
+	// TODO: I have this in a few places now, need to refactor into a single colour class
+
+	//weights
+ 	const float CHANNEL_LUM_WEIGHTS[3] = { 0.299f,0.587f,0.114f};
+	float totalBright=backgroundR*CHANNEL_LUM_WEIGHTS[0] +
+			backgroundG*CHANNEL_LUM_WEIGHTS[1] +
+			backgroundB*CHANNEL_LUM_WEIGHTS[2];
+
+	float textGrey;
+	if(totalBright > 0.5f)
+	{
+		//"bright" scene, use black text
+		textGrey=0.0f;
+	}
+	else
+	{
+		//"Dark" background, use white text
+		textGrey=1.0f;
+	}
+	
+
+	//-------
+
 	//Draw ticks on colour bar
 	glBegin(GL_LINES);
-		glColor4f(1.0,1.0,1.0f,1.0f);
+		glColor4f(textGrey,textGrey,textGrey,1.0f);
 		//Top tick
 		glVertex3f(tlX,tlY,0);
 		glVertex3f(tlX+width,tlY,0);
@@ -1759,8 +1826,6 @@ void DrawColourBarOverlay::draw() const
 	glPopMatrix();
 	glEnable(GL_CULL_FACE);
 
-
-
 }
 
 void DrawColourBarOverlay::setColourVec(const vector<float> &r,
@@ -1862,7 +1927,7 @@ void DrawField3D::draw() const
 								//Set colour and point loc
 								colourMapWrap(colourMapID,rgb.v,
 										field->getData(uiX,uiY,uiZ), 
-										colourMapBound[0],colourMapBound[1]);
+										colourMapBound[0],colourMapBound[1],false);
 								
 								ptsCache.push_back(make_pair(field->getPoint(uiX,uiY,uiZ)+delta,rgb));
 							}
@@ -2122,6 +2187,13 @@ DrawAxis::~DrawAxis()
 {
 }
 
+
+DrawableObj* DrawAxis::clone() const
+{
+	DrawAxis *d = new DrawAxis(*this);
+	return d;
+}
+
 void DrawAxis::setStyle(unsigned int s)
 {
 	style=s;
diff --git a/src/gl/drawables.h b/src/gl/drawables.h
index 787083b..9592dd8 100644
--- a/src/gl/drawables.h
+++ b/src/gl/drawables.h
@@ -104,7 +104,7 @@ enum
 	DRAW_TYPE_AXIS,
 };
 
-//TODO: It seems unneccesary to have multiple types for the bind
+//TODO: It seems unnecessary to have multiple types for the bind
 
 //!Binding enums. Needed to bind drawable selection
 //to internal modification actions inside the drawable
@@ -143,6 +143,9 @@ class DrawableObj
 		bool haveChanged;
 		//!Pointer to current scene camera
 		static const Camera *curCamera;	
+		
+		//Background colour
+		static float backgroundR,backgroundG,backgroundB;
 		//Pointer to texture pool object
 		static TexturePool *texPool;
 
@@ -165,8 +168,15 @@ class DrawableObj
 		//!Constructor
 		DrawableObj();
 
+		//Obtain the type mask for this drawable
 		virtual unsigned int getType() const =0;	
 		
+		//Obtain a copy of this object, which is still valid
+		// after destruction of the original
+		// Disallowed by default Implement in derived object!
+		//TODO: Once most sub-objects have this function, make pure virtual
+		virtual DrawableObj *clone() const {ASSERT(false); return 0;}
+
 		//!Do we need to do element based depth sorting?
 		virtual bool needsDepthSorting() const { return false; } ;
 
@@ -206,6 +216,8 @@ class DrawableObj
 		virtual Point3D getCentroid() const  ;
 
 		static void setWindowSize(unsigned int x, unsigned int y){winX=x;winY=y;};	
+		static void setBackgroundColour(float r, float g,float b)
+			{backgroundR=r; backgroundG=g;backgroundB=b;}
 
 };
 
@@ -225,6 +237,10 @@ class DrawPoint : public DrawableObj
 		//!Destructor
 		virtual ~DrawPoint();
 
+		unsigned int getType() const {return DRAW_TYPE_POINT;}	
+
+		virtual DrawableObj *clone() const;
+
 		//!Sets the color of the point to be drawn
 		void setColour(float r, float g, float b, float alpha);
 		//!Draws the points
@@ -257,6 +273,9 @@ class DrawManyPoints : public DrawableObj
 		virtual ~DrawManyPoints();
 		
 		virtual unsigned int getType() const {return DRAW_TYPE_MANYPOINT;};	
+
+		virtual DrawableObj *clone() const;
+		
 		//!Swap out the internal vector with an extenal one
 		void swap(std::vector<Point3D> &);
 		//!Remove all points
@@ -316,6 +335,8 @@ class DrawVector: public DrawableObj
 		//!Destructor
 		virtual ~DrawVector();
 	
+		virtual DrawableObj *clone() const;
+		
 		virtual unsigned int getType() const {return DRAW_TYPE_VECTOR;};	
 	
 		//!Set if we want to draw the arrow or not
@@ -370,6 +391,8 @@ class DrawTriangle : public DrawableObj
 		//!Destructor
 		virtual ~DrawTriangle();
 
+		virtual DrawableObj *clone() const;
+
 		virtual unsigned int getType() const {return DRAW_TYPE_TRIANGLE;};	
 		
 		//!Set one of three vertices (0-2) locations
@@ -408,6 +431,8 @@ class DrawQuad : public DrawableObj
 		//!Destructor
 		virtual ~DrawQuad() {};
 		
+		virtual DrawableObj *clone() const;
+		
 		virtual unsigned int getType() const {return DRAW_TYPE_QUAD;};	
 
 		//!Get bounding cube
@@ -856,14 +881,16 @@ class DrawRectPrism  : public DrawableObj
 		~DrawRectPrism();
 
 		virtual unsigned int getType() const {return DRAW_TYPE_RECTPRISM;}
-		
+	
+		virtual DrawableObj *clone() const;
+
 		//!Draw object
 		void draw() const;
 
 		//!Set the draw mode
 		void setDrawMode(unsigned int n) { drawMode=n;};
 		//!Set colour of box
-		void setColour(float rnew, float gnew, float bnew, float anew);
+		void setColour(float rnew, float gnew, float bnew, float anew=1.0f);
 		//!Set thickness of box
 		void setLineWidth(float lineWidth);
 		//!Set up box as axis-aligned rectangle using two points
@@ -906,6 +933,7 @@ class DrawColourBarOverlay : public DrawableObj
 		
 
 		virtual unsigned int getType() const {return DRAW_TYPE_COLOURBAR;}
+		
 	
 		void getBoundingBox(BoundCube &b) const ;
 
@@ -1110,6 +1138,8 @@ class DrawAxis : public DrawableObj
 		~DrawAxis();
 	
 		virtual unsigned int getType() const {return DRAW_TYPE_AXIS;}
+		
+		virtual DrawableObj *clone() const;
 
 		//!Draw object
 		void draw() const;
diff --git a/src/gl/glDebug.h b/src/gl/glDebug.h
new file mode 100644
index 0000000..5e464c6
--- /dev/null
+++ b/src/gl/glDebug.h
@@ -0,0 +1,74 @@
+#ifndef GLDEBUG_H
+#define GLDEBUG_H
+
+
+//OpenGL debugging macro
+#if DEBUG
+#ifdef __APPLE__
+#include <OpenGL/gl.h>
+#else
+#include <GL/gl.h>
+#endif
+#include <map>
+
+#define glError() { \
+		GLenum err = glGetError(); \
+		while (err != GL_NO_ERROR) { \
+					fprintf(stderr, "glError: %s caught at %s:%u\n", (char *)gluErrorString(err), __FILE__, __LINE__); \
+					err = glGetError(); \
+				} \
+		std::cerr << "glErr Clean " << __FILE__ << ":" << __LINE__ << std::endl; \
+}
+	
+
+#define glStackDepths() { \
+		int gldepthdebug[3];glGetIntegerv (GL_MODELVIEW_STACK_DEPTH, gldepthdebug);\
+	       	glGetIntegerv (GL_PROJECTION_STACK_DEPTH, gldepthdebug+1);\
+	       	glGetIntegerv (GL_TEXTURE_STACK_DEPTH, gldepthdebug+2);\
+		std::cerr << "OpenGL Stack Depths: ModelV:" << gldepthdebug[0] << " Pr: "\
+		 << gldepthdebug[1] << " Tex:" << gldepthdebug[2] << std::endl;}
+	
+
+inline void glPrintMatrix(int matrixMode )
+{
+
+	ASSERT(matrixMode == GL_PROJECTION_MATRIX ||
+			matrixMode == GL_MODELVIEW_MATRIX ||
+			matrixMode == GL_TEXTURE_MATRIX );
+
+	//Record old matrix mode,
+	// then switch to new stack and retrieve the top
+	float f[16];
+	{
+	GLint oldMode;
+	glGetIntegerv( GL_MATRIX_MODE, &oldMode);
+	std::map<int,int> remapMode;
+	remapMode[GL_PROJECTION_MATRIX ] = GL_PROJECTION;
+	remapMode[GL_MODELVIEW_MATRIX ] = GL_MODELVIEW;
+	remapMode[GL_TEXTURE_MATRIX] = GL_TEXTURE;
+	glMatrixMode (remapMode[matrixMode]);
+	//retrieve
+	glGetFloatv( matrixMode , f);
+	glMatrixMode(oldMode);
+	}
+
+
+	std::cerr << "[ ";
+	for(size_t ui=0; ui <4 ; ui++)
+	{
+		for(size_t uj=0;uj<4; uj++)
+		{
+			std::cerr << f[ui*4 + uj] << "\t" ;
+		}
+		if(ui !=3)
+			std::cerr << std::endl;
+	}
+	std::cerr << " ] " << std::endl;
+}
+
+#else
+	#define glStackDepths()
+#define glError()
+#endif
+
+#endif
diff --git a/src/gl/scene.cpp b/src/gl/scene.cpp
index adf35d3..79ed633 100644
--- a/src/gl/scene.cpp
+++ b/src/gl/scene.cpp
@@ -35,12 +35,13 @@ unsigned int ANIMATE_PROGRESS_NUMFRAMES=3;
 
 
 
-Scene::Scene() : tempCam(0), cameraSet(true), outWinAspect(1.0f), r(0.0f), g(0.0f), b(0.0f)
+Scene::Scene() : tempCam(0), cameraSet(true), outWinAspect(1.0f)
 {
+	glewInited=false;
+
 	lastHovered=lastSelected=(unsigned int)(-1);
 	lockInteract=false;
 	hoverMode=selectionMode=false;
-	viewRestrict=false;
 	useAlpha=true;
 	useLighting=true;
 	useEffects=false;
@@ -53,15 +54,10 @@ Scene::Scene() : tempCam(0), cameraSet(true), outWinAspect(1.0f), r(0.0f), g(0.0
 
 	activeCam = new CameraLookAt;
 
-	//Initialise GLEW
-#if defined(WIN32) || defined(WIN64)
-	if(glewInit())
-	{
-		cerr << "Opengl context could not be created, aborting." << endl;
-		//Blow up without opengl
-		exit(1);
-	}
-#endif
+	lightPosition[0]= 1.0;
+	lightPosition[1]= 1.0;
+	lightPosition[2]= 1.0;
+	lightPosition[3]=0.0;
 
 
 	DrawableObj::setTexPool(new TexturePool);
@@ -76,30 +72,61 @@ Scene::~Scene()
 
 unsigned int Scene::initDraw()
 {
+	//Initialise GLEW
+#if defined(WIN32) || defined(WIN64)
+	if(!glewInited)
+	{
+		unsigned int errCode;
+		errCode=glewInit();
+		if(errCode!= GLEW_OK)
+		{
+			cerr << "Opengl context could not be created, aborting." << endl;
+			cerr << "Glew reports:" << glewGetErrorString(errCode) << endl;
+			//Blow up without opengl
+			exit(1);
+		}
+		glewInited=true;
+	}
+#endif
+	glClearColor( rBack, gBack, bBack,1.0f );
 	glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
 
+	glEnable(GL_CULL_FACE);
+	glCullFace(GL_BACK);
+
+	glEnable(GL_DEPTH_TEST);
+
+	glEnable(GL_COLOR_MATERIAL);
+	glColorMaterial ( GL_FRONT, GL_AMBIENT_AND_DIFFUSE ) ;
+
+	glEnable(GL_POINT_SMOOTH);
+	glEnable(GL_LINE_SMOOTH);
+	
 	//Will it blend? That is the question...
 	// let the objects know about this, so they
 	// can pick the right algorithm
 	DrawableObj::setUseAlphaBlending(useAlpha);
 	
+	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+	
 	if(useAlpha)
 		glEnable(GL_BLEND);
 	else
 		glDisable(GL_BLEND);
 
 	glDisable(GL_LIGHTING);
+	glEnable(GL_LIGHT0);
+	glShadeModel(GL_SMOOTH);
 	//Set up the scene lights
 	//==
+
 	//Set up default lighting
 	const float light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
 	const float light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
-	const float light_specular[] = { 0.0, 0.0, 0.0, 0.0 };
-	float light_position[] = { 1.0, 1.0, 1.0, 0.0 };
 	glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
 	glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
-	glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
-	glLightfv(GL_LIGHT0, GL_POSITION, light_position);
+	// The direction the light shines in
+	glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); 
 
 
 	//==
@@ -148,26 +175,14 @@ unsigned int Scene::initDraw()
 	return passes;
 }
 
-void Scene::updateCam(const Camera *camToUse) const
+void Scene::updateCam(const Camera *camToUse, bool useIdent=true) const
 {
 	Point3D lightNormal;
 	
-
-	glLoadIdentity();
-	//If viewport restriction is on, inform camera to
-	//shrink viewport to specified region
-	if(viewRestrict)
-	{
-		camToUse->apply(outWinAspect,boundCube,true,
-				viewRestrictStart[0],viewRestrictEnd[0],
-				viewRestrictStart[1],viewRestrictEnd[1]);
-	}
-	else
-		camToUse->apply(outWinAspect,boundCube);
+	camToUse->apply(outWinAspect,boundCube,useIdent);
 
 	lightNormal=camToUse->getViewDirection();
 	glNormal3f(lightNormal[0],lightNormal[1],lightNormal[2]);	
-
 }
 
 void Scene::updateProgressOverlay()
@@ -182,53 +197,51 @@ void Scene::updateProgressOverlay()
 	progressAnimTex.setShowDelayTime(1.0f);
 }
 
-void Scene::draw() 
+void Scene::draw(bool noUpdateCam) 
 {
 
 	glPushMatrix();
 
-
 	Camera *camToUse;
 	if(tempCam)
 		camToUse=tempCam;
 	else
 		camToUse=activeCam;
-	//Inform text about current camera, so it can billboard if needed
+
+	//Inform text about current camera, 
+	// so it can eg billboard if needed
 	DrawableObj::setCurCamera(camToUse);
 	DrawableObj::setWindowSize(winX,winY);
+	DrawableObj::setBackgroundColour(rBack,gBack,bBack);
 	Effect::setCurCam(camToUse);
 
 
 	bool lightsOn=false;
+	//Find number of passes to  perform
 	unsigned int numberTotalPasses;
 	numberTotalPasses=initDraw();
 
-	unsigned int passNumber=0;
-
-	if(cameraSet)
+	if(cameraSet && !noUpdateCam)
 		updateCam(camToUse);
 
 
 
-	bool needCamUpdate=false;
-	while(passNumber < numberTotalPasses)
+	for(unsigned int passNumber=0; passNumber<numberTotalPasses; passNumber++)
 	{
 
 		if(useEffects)
 		{
+			bool needCamUpdate=false;
 			for(unsigned int ui=0;ui<effects.size();ui++)
 			{
 				effects[ui]->enable(passNumber);
 				needCamUpdate|=effects[ui]->needCamUpdate();
 			}
 
-			if(cameraSet && needCamUpdate)
-			{
-				glLoadIdentity();	
+			if(cameraSet && !noUpdateCam && needCamUpdate )
 				updateCam(camToUse);
-			}
 		}
-
+		
 
 		if(showAxis)
 		{
@@ -253,7 +266,7 @@ void Scene::draw()
 		drawObjectVector(objects,lightsOn,true);
 		//-----------	
 		
-		//Second pass with transparent objects
+		//Second sub-pass with transparent objects
 		//-----------	
 		//Draw the referenced objects
 		drawObjectVector(refObjects,lightsOn,false);
@@ -262,8 +275,6 @@ void Scene::draw()
 		//-----------	
 		
 		
-		glFlush();
-		passNumber++;
 	}
 	
 	
@@ -352,17 +363,7 @@ void Scene::drawOverlays() const
 
 	glDisable(GL_LIGHTING);
 	//Set the opengl camera state back into modelview mode
-	if(viewRestrict)
-	{
-
-		//FIXME: How does the aspect ratio fit in here?
-		gluOrtho2D(viewRestrictStart[0],
-				viewRestrictEnd[0],
-				viewRestrictStart[0],
-				viewRestrictStart[1]);
-	}
-	else
-		gluOrtho2D(0, outWinAspect, 1.0, 0);
+	gluOrtho2D(0, outWinAspect, 1.0, 0);
 
 
 
@@ -617,6 +618,18 @@ void Scene::clearRefObjs()
 	refObjects.clear();
 }
 
+void Scene::getLightPos(float *f) const
+{ 
+	for(unsigned int ui=0;ui<4;ui++)
+		f[ui] = lightPosition[ui];
+}
+
+void Scene::setLightPos(const float *f)
+{
+	for(unsigned int ui=0;ui<4;ui++)
+		lightPosition[ui]=f[ui];
+}
+
 void Scene::setShowProgress(bool show)
 {
 	showProgressAnimation=show;
@@ -949,15 +962,10 @@ void Scene::getModifiedBindings(std::vector<std::pair<const Filter *, SelectionB
 		selectionDevices[ui]->getModifiedBindings(bindings);
 }
 
-void Scene::restrictView(float xS, float yS, float xFin, float yFin)
+void Scene::resetModifiedBindings()  
 {
-	viewRestrictStart[0]=xS;	
-	viewRestrictStart[1]=yS;	
-	
-	viewRestrictEnd[0]=xFin;	
-	viewRestrictEnd[1]=yFin;
-
-	viewRestrict=true;	
+	for(unsigned int ui=0;ui<selectionDevices.size();ui++)
+		selectionDevices[ui]->resetModifiedBindings();
 }
 
 
diff --git a/src/gl/scene.h b/src/gl/scene.h
index 611bfac..847695e 100644
--- a/src/gl/scene.h
+++ b/src/gl/scene.h
@@ -30,36 +30,15 @@ class SelectionBinding;
 //Custom includes
 #include "effect.h"
 
-//OpenGL debugging macro
-#if DEBUG
-#define glError() { \
-		GLenum err = glGetError(); \
-		while (err != GL_NO_ERROR) { \
-					fprintf(stderr, "glError: %s caught at %s:%u\n", (char *)gluErrorString(err), __FILE__, __LINE__); \
-					err = glGetError(); \
-				} \
-		std::cerr << "glErr Clean " << __FILE__ << ":" << __LINE__ << std::endl; \
-}
-#else
-#define glError()
-#endif
+#include "glDebug.h"
 
-#ifdef DEBUG
-	#define glStackDepths() { \
-		int gldepthdebug[3];glGetIntegerv (GL_MODELVIEW_STACK_DEPTH, gldepthdebug);\
-	       	glGetIntegerv (GL_PROJECTION_STACK_DEPTH, gldepthdebug+1);\
-	       	glGetIntegerv (GL_TEXTURE_STACK_DEPTH, gldepthdebug+2);\
-		std::cerr << "OpenGL Stack Depths: ModelV:" << gldepthdebug[0] << " Pr: "\
-		 << gldepthdebug[1] << " Tex:" << gldepthdebug[2] << std::endl;}
-#else
-	#define glStackDepths()
-#endif
 
 //!The scene class brings together elements such as objects, lights, and cameras
 //to enable scene rendering
 class Scene
 {
 	private:
+		bool glewInited;
 		//!Viscontroller. Needed for notification of updates during selection binding
 		VisController *visControl;
 		//!Objects that will be used for drawing
@@ -91,9 +70,6 @@ class Scene
 		//!Aspect ratio of output window (x/y) -- needed for cams
 		float outWinAspect;
 
-		//!Blank canvas colour
-		float r,g,b;
-
 		//!Effect ID handler
 		UniqueIDHandler effectIDs;
 
@@ -109,15 +85,13 @@ class Scene
 		//!Tells us if we are in hover mode (should we draw hover overlays?)
 		bool hoverMode;
 
-		//!Is the camera to be restricted to only draw a particular portion of the viewport?
-		bool viewRestrict;
-
-		float viewRestrictStart[2], viewRestrictEnd[2];
-			
 		//!Last selected object from call to glSelect(). -1 if last
 		// call failed to identify an item
 		unsigned int lastSelected;
-	
+
+		//Prevent camera updates from being passed to opengl
+		bool witholdCamUpdate;
+
 		//!Last hoeverd object	
 		unsigned int lastHovered;
 
@@ -143,6 +117,9 @@ class Scene
 		//texture to use for pgoress animation
 		DrawAnimatedOverlay progressAnimTex;
 
+		//Lighting vector
+		float lightPosition[4];
+
 		///!Draw the hover overlays
 		void drawHoverOverlay();
 
@@ -154,7 +131,7 @@ class Scene
 		//!initialise the drawing window
 		unsigned int initDraw();
 
-		void updateCam(const Camera *camToUse) const;
+		void updateCam(const Camera *camToUse, bool loadIdentity) const;
 
 		//reset the position of the overlay
 		void updateProgressOverlay(); 
@@ -174,7 +151,7 @@ class Scene
 		//!Set the vis control
 		void setViscontrol(VisController *v) { visControl=v;};
 		//!Draw the objects in the active window. May adjust cameras and compute bounding as needed.
-		void draw();
+		void draw(bool noUpdateCam=false);
 
 	
 		//!clear rendering vectors
@@ -185,7 +162,16 @@ class Scene
 		void clearRefObjs();
 		//!Clear object bindings vector
 		void clearBindings();
+	
+
+		//!Obtain the scene's light coordinates in camera relative space
+		// requires an array os size 4  (xyzw)
+		void getLightPos(float *f) const;
 		
+		//!Obtain the scene's light coordinates in camera relative space
+		// requires an array os size 4  (xyzw)
+		void setLightPos(const float *f);
+
 		//!Set the aspect ratio of the output window. Required.
 		void setAspect(float newAspect);
 		//!retrieve aspect ratio (h/w) of output win
@@ -299,10 +285,8 @@ class Scene
 		//!Return any devices that have been modified since their creation
 		void getModifiedBindings(std::vector<std::pair<const Filter *,SelectionBinding > > &bindings) const;
 
-		//!Restrict the openGL drawing view when using the camera
-		void restrictView(float xS,float yS, float xFin, float yFin);
-		//!Disable view restriction
-		void unrestrictView() { viewRestrict=false;};
+		//!Reset any modifiecations to bindings back to the unmodified state
+		void resetModifiedBindings();
 
 		//!Set whether to use alpha blending
 		void setAlpha(bool newAlpha) { useAlpha=newAlpha;};
diff --git a/src/gl/select.cpp b/src/gl/select.cpp
index 7c1776f..78e8b1c 100644
--- a/src/gl/select.cpp
+++ b/src/gl/select.cpp
@@ -81,6 +81,15 @@ void SelectionDevice::getModifiedBindings(vector<std::pair<const Filter *,Select
 	}
 }
 
+void SelectionDevice::resetModifiedBindings()
+{
+	ASSERT(target);
+	for(unsigned int ui=0;ui<bindingVec.size();ui++)
+	{
+		bindingVec[ui].resetModified();
+	}
+}
+
 bool SelectionDevice::getAvailBindings(const DrawableObj *d,vector<const SelectionBinding*> &b) const
 {
 	ASSERT(b.empty());
diff --git a/src/gl/select.h b/src/gl/select.h
index c65d1ed..b333c1c 100644
--- a/src/gl/select.h
+++ b/src/gl/select.h
@@ -158,6 +158,8 @@ class SelectionBinding
 
 		//!True if the binding has modified the data
 		bool modified() const {return valModified;};
+
+		void resetModified() { valModified=false; }
 };
 
 class SelectionDevice
@@ -181,8 +183,11 @@ public:
 				unsigned int keyFlags,	SelectionBinding* &b);
 
 		bool getAvailBindings(const DrawableObj *d, std::vector<const SelectionBinding*> &b) const;
-		void getModifiedBindings(std::vector<std::pair<const Filter *,SelectionBinding> > &bindings);
 
+		void getModifiedBindings(std::vector<std::pair<const Filter *,SelectionBinding> > &bindings);
+		//!Return any devices that have been modified since their creation
+		void resetModifiedBindings() ;
+			
 		size_t getNumBindings() const { return bindingVec.size(); }
 };
 
diff --git a/src/gl/textures.cpp b/src/gl/textures.cpp
index f2aa789..400cfab 100644
--- a/src/gl/textures.cpp
+++ b/src/gl/textures.cpp
@@ -22,7 +22,7 @@
 
 #include "textures.h"
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 #include "common/pngread.h"
 
 #include <string>
@@ -200,9 +200,8 @@ int pngTexture(texture* dest, const char* filename, GLenum type)
 		{
 			dest->data[z++] = texture_rows[y][x];
 		}
-		free(texture_rows[y]);
 	}
-	free(texture_rows);
+	free_pngrowpointers(texture_rows,height);
 
 	//Retrieve the in-use texture, which we will reset later
 	if (type == GL_TEXTURE_1D)
@@ -269,10 +268,12 @@ int pngTexture3D(texture *dest, const vector<string> &fileNames)
 			if(width != dest->width || height !=dest->height)
 			{
 				delete[] dataArray;
+				free_pngrowpointers(texture_rows,height);
 				return 3;
 			}
 		}
 
+		//Copy data into texture structure
 		dest->width = width;
 		dest->height = height;
 
@@ -284,7 +285,12 @@ int pngTexture3D(texture *dest, const vector<string> &fileNames)
 			for (size_t x=0; x<4*(width); x++)
 				dataArray[ui][arrayDest++] = texture_rows[y][x];
 		}
+
+		//Free PNG image pointers
+		free_pngrowpointers(texture_rows,height);
+
 	}
+				
 
 	size_t offset=0;
 	//Copy data into cube that we will send to video card
diff --git a/src/gl/tr.cpp b/src/gl/tr.cpp
new file mode 100644
index 0000000..79a1c95
--- /dev/null
+++ b/src/gl/tr.cpp
@@ -0,0 +1,493 @@
+//Tile Rendering Library, 
+// http://www.mesa3d.org/brianp/TR.html
+// GNU GPL 2+
+
+
+/* $Id: tr.c,v 1.9 1998/01/29 16:56:54 brianp Exp $ */
+
+/*
+ * $Log: tr.c,v $
+ * Revision 1.9  1998/01/29  16:56:54  brianp
+ * allow trOrtho() and trFrustum() to be called at any time, minor clean-up
+ *
+ * Revision 1.8  1998/01/28  19:47:39  brianp
+ * minor clean-up for C++
+ *
+ * Revision 1.7  1997/07/21  17:34:38  brianp
+ * added tile borders
+ *
+ * Revision 1.6  1997/07/21  15:47:35  brianp
+ * renamed all "near" and "far" variables
+ *
+ * Revision 1.5  1997/04/26  21:23:25  brianp
+ * added trRasterPos3f function
+ *
+ * Revision 1.4  1997/04/26  19:59:36  brianp
+ * set CurrentTile to -1 before first tile and after last tile
+ *
+ * Revision 1.3  1997/04/22  23:51:15  brianp
+ * added WIN32 header stuff, removed tabs
+ *
+ * Revision 1.2  1997/04/19  23:26:10  brianp
+ * many API changes
+ *
+ * Revision 1.1  1997/04/18  21:53:05  brianp
+ * Initial revision
+ *
+ */
+
+
+/*
+ * Tiled Rendering library
+ * Version 1.1
+ * Copyright (C) Brian Paul
+ */
+
+
+#include <assert.h>
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#ifdef WIN32
+#include <windows.h>
+#endif
+#ifdef __APPLE__
+#include <OpenGL/gl.h>
+#include <OpenGL/glu.h>
+#else
+#include <GL/gl.h>
+#include <GL/glu.h>
+#endif
+#include "tr.h"
+
+
+#define DEFAULT_TILE_WIDTH  256
+#define DEFAULT_TILE_HEIGHT 256
+#define DEFAULT_TILE_BORDER 0
+
+
+struct _TRctx {
+   /* Final image parameters */
+   GLint ImageWidth, ImageHeight;
+   GLenum ImageFormat, ImageType;
+   GLvoid *ImageBuffer;
+
+   /* Tile parameters */
+   GLint TileWidth, TileHeight;
+   GLint TileWidthNB, TileHeightNB;
+   GLint TileBorder;
+   GLenum TileFormat, TileType;
+   GLvoid *TileBuffer;
+
+   /* Projection parameters */
+   GLboolean Perspective;
+   GLdouble Left;
+   GLdouble Right;
+   GLdouble Bottom;
+   GLdouble Top;
+   GLdouble Near;
+   GLdouble Far;
+
+   /* Misc */
+   TRenum RowOrder;
+   GLint Rows, Columns;
+   GLint CurrentTile;
+   GLint CurrentTileWidth, CurrentTileHeight;
+   GLint CurrentRow, CurrentColumn;
+
+   GLint ViewportSave[4];
+};
+
+
+
+/*
+ * Misc setup including computing number of tiles (rows and columns).
+ */
+static void Setup(TRcontext *tr)
+{
+   if (!tr)
+      return;
+
+   tr->Columns = (tr->ImageWidth + tr->TileWidthNB - 1) / tr->TileWidthNB;
+   tr->Rows = (tr->ImageHeight + tr->TileHeightNB - 1) / tr->TileHeightNB;
+   tr->CurrentTile = 0;
+
+   assert(tr->Columns >= 0);
+   assert(tr->Rows >= 0);
+}
+
+
+
+TRcontext *trNew(void)
+{
+   TRcontext *tr = (TRcontext *) calloc(1, sizeof(TRcontext));
+   if (tr) {
+      tr->TileWidth = DEFAULT_TILE_WIDTH;
+      tr->TileHeight = DEFAULT_TILE_HEIGHT;
+      tr->TileBorder = DEFAULT_TILE_BORDER;
+      tr->RowOrder = TR_BOTTOM_TO_TOP;
+      tr->CurrentTile = -1;
+   }
+   return (TRcontext *) tr;
+}
+
+
+void trDelete(TRcontext *tr)
+{
+   if (tr)
+      free(tr);
+}
+
+
+
+void trTileSize(TRcontext *tr, GLint width, GLint height, GLint border)
+{
+   if (!tr)
+      return;
+
+   assert(border >= 0);
+   assert(width >= 1);
+   assert(height >= 1);
+   assert(width >= 2*border);
+   assert(height >= 2*border);
+
+   tr->TileBorder = border;
+   tr->TileWidth = width;
+   tr->TileHeight = height;
+   tr->TileWidthNB = width - 2 * border;
+   tr->TileHeightNB = height - 2 * border;
+   Setup(tr);
+}
+
+
+
+void trTileBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image)
+{
+   if (!tr)
+      return;
+
+   tr->TileFormat = format;
+   tr->TileType = type;
+   tr->TileBuffer = image;
+}
+
+
+
+void trImageSize(TRcontext *tr, GLint width, GLint height)
+{
+   if (!tr)
+      return;
+
+   tr->ImageWidth = width;
+   tr->ImageHeight = height;
+   Setup(tr);
+}
+
+
+void trImageBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image)
+{
+   if (!tr)
+      return;
+
+   tr->ImageFormat = format;
+   tr->ImageType = type;
+   tr->ImageBuffer = image;
+}
+
+
+GLint trGet(TRcontext *tr, TRenum param)
+{
+   if (!tr)
+      return 0;
+
+   switch (param) {
+      case TR_TILE_WIDTH:
+         return tr->TileWidth;
+      case TR_TILE_HEIGHT:
+         return tr->TileHeight;
+      case TR_TILE_BORDER:
+         return tr->TileBorder;
+      case TR_IMAGE_WIDTH:
+         return tr->ImageWidth;
+      case TR_IMAGE_HEIGHT:
+         return tr->ImageHeight;
+      case TR_ROWS:
+         return tr->Rows;
+      case TR_COLUMNS:
+         return tr->Columns;
+      case TR_CURRENT_ROW:
+         if (tr->CurrentTile<0)
+            return -1;
+         else
+            return tr->CurrentRow;
+      case TR_CURRENT_COLUMN:
+         if (tr->CurrentTile<0)
+            return -1;
+         else
+            return tr->CurrentColumn;
+      case TR_CURRENT_TILE_WIDTH:
+         return tr->CurrentTileWidth;
+      case TR_CURRENT_TILE_HEIGHT:
+         return tr->CurrentTileHeight;
+      case TR_ROW_ORDER:
+         return (GLint) tr->RowOrder;
+      default:
+         return 0;
+   }
+}
+
+
+void trRowOrder(TRcontext *tr, TRenum order)
+{
+   if (!tr)
+      return;
+
+   if (order==TR_TOP_TO_BOTTOM || order==TR_BOTTOM_TO_TOP)
+      tr->RowOrder = order;
+}
+
+
+void trOrtho(TRcontext *tr,
+             GLdouble left, GLdouble right,
+             GLdouble bottom, GLdouble top,
+             GLdouble zNear, GLdouble zFar)
+{
+   if (!tr)
+      return;
+
+   tr->Perspective = GL_FALSE;
+   tr->Left = left;
+   tr->Right = right;
+   tr->Bottom = bottom;
+   tr->Top = top;
+   tr->Near = zNear;
+   tr->Far = zFar;
+}
+
+
+void trFrustum(TRcontext *tr,
+               GLdouble left, GLdouble right,
+               GLdouble bottom, GLdouble top,
+               GLdouble zNear, GLdouble zFar)
+{
+   if (!tr)
+      return;
+
+   tr->Perspective = GL_TRUE;
+   tr->Left = left;
+   tr->Right = right;
+   tr->Bottom = bottom;
+   tr->Top = top;
+   tr->Near = zNear;
+   tr->Far = zFar;
+}
+
+
+void trPerspective(TRcontext *tr,
+                   GLdouble fovy, GLdouble aspect,
+                   GLdouble zNear, GLdouble zFar )
+{
+   GLdouble xmin, xmax, ymin, ymax;
+   ymax = zNear * tan(fovy * 3.14159265 / 360.0);
+   ymin = -ymax;
+   xmin = ymin * aspect;
+   xmax = ymax * aspect;
+   trFrustum(tr, xmin, xmax, ymin, ymax, zNear, zFar);
+}
+
+
+void trBeginTile(TRcontext *tr)
+{
+   GLint matrixMode;
+   GLint tileWidth, tileHeight, border;
+   GLdouble left, right, bottom, top;
+
+   if (!tr)
+      return;
+
+   if (tr->CurrentTile <= 0) {
+      Setup(tr);
+      /* Save user's viewport, will be restored after last tile rendered */
+      glGetIntegerv(GL_VIEWPORT, tr->ViewportSave);
+   }
+
+   /* which tile (by row and column) we're about to render */
+   if (tr->RowOrder==TR_BOTTOM_TO_TOP) {
+      tr->CurrentRow = tr->CurrentTile / tr->Columns;
+      tr->CurrentColumn = tr->CurrentTile % tr->Columns;
+   }
+   else if (tr->RowOrder==TR_TOP_TO_BOTTOM) {
+      tr->CurrentRow = tr->Rows - (tr->CurrentTile / tr->Columns) - 1;
+      tr->CurrentColumn = tr->CurrentTile % tr->Columns;
+   }
+   else {
+      /* This should never happen */
+      abort();
+   }
+   assert(tr->CurrentRow < tr->Rows);
+   assert(tr->CurrentColumn < tr->Columns);
+
+   border = tr->TileBorder;
+
+   /* Compute actual size of this tile with border */
+   if (tr->CurrentRow < tr->Rows-1)
+      tileHeight = tr->TileHeight;
+   else
+      tileHeight = tr->ImageHeight - (tr->Rows-1) * (tr->TileHeightNB) + 2 * border;
+
+   if (tr->CurrentColumn < tr->Columns-1)
+      tileWidth = tr->TileWidth;
+   else
+      tileWidth = tr->ImageWidth - (tr->Columns-1) * (tr->TileWidthNB) + 2 * border;
+
+   /* Save tile size, with border */
+   tr->CurrentTileWidth = tileWidth;
+   tr->CurrentTileHeight = tileHeight;
+
+   glViewport(0, 0, tileWidth, tileHeight);  /* tile size including border */
+
+   /* save current matrix mode */
+   glGetIntegerv(GL_MATRIX_MODE, &matrixMode);
+   glMatrixMode(GL_PROJECTION);
+   glLoadIdentity();
+
+   /* compute projection parameters */
+   left = tr->Left + (tr->Right - tr->Left)
+        * (tr->CurrentColumn * tr->TileWidthNB - border) / tr->ImageWidth;
+   right = left + (tr->Right - tr->Left) * tileWidth / tr->ImageWidth;
+   bottom = tr->Bottom + (tr->Top - tr->Bottom)
+          * (tr->CurrentRow * tr->TileHeightNB - border) / tr->ImageHeight;
+   top = bottom + (tr->Top - tr->Bottom) * tileHeight / tr->ImageHeight;
+
+   if (tr->Perspective)
+      glFrustum(left, right, bottom, top, tr->Near, tr->Far);
+   else
+      glOrtho(left, right, bottom, top, tr->Near, tr->Far);
+
+   /* restore user's matrix mode */
+   glMatrixMode(matrixMode);
+}
+
+
+
+int trEndTile(TRcontext *tr)
+{
+   GLint prevRowLength, prevSkipRows, prevSkipPixels, prevAlignment;
+
+   if (!tr)
+      return 0;
+
+   assert(tr->CurrentTile>=0);
+
+   /* be sure OpenGL rendering is finished */
+   glFlush();
+
+   /* save current glPixelStore values */
+   glGetIntegerv(GL_PACK_ROW_LENGTH, &prevRowLength);
+   glGetIntegerv(GL_PACK_SKIP_ROWS, &prevSkipRows);
+   glGetIntegerv(GL_PACK_SKIP_PIXELS, &prevSkipPixels);
+   glGetIntegerv(GL_PACK_ALIGNMENT, &prevAlignment);
+
+   if (tr->TileBuffer) {
+      GLint srcX = tr->TileBorder;
+      GLint srcY = tr->TileBorder;
+      GLint srcWidth = tr->TileWidthNB;
+      GLint srcHeight = tr->TileHeightNB;
+      glReadPixels(srcX, srcY, srcWidth, srcHeight,
+                   tr->TileFormat, tr->TileType, tr->TileBuffer);
+   }
+
+   if (tr->ImageBuffer) {
+      GLint srcX = tr->TileBorder;
+      GLint srcY = tr->TileBorder;
+      GLint srcWidth = tr->CurrentTileWidth - 2 * tr->TileBorder;
+      GLint srcHeight = tr->CurrentTileHeight - 2 * tr->TileBorder;
+      GLint destX = tr->TileWidthNB * tr->CurrentColumn;
+      GLint destY = tr->TileHeightNB * tr->CurrentRow;
+
+      /* setup pixel store for glReadPixels */
+      glPixelStorei(GL_PACK_ROW_LENGTH, tr->ImageWidth);
+      glPixelStorei(GL_PACK_SKIP_ROWS, destY);
+      glPixelStorei(GL_PACK_SKIP_PIXELS, destX);
+      glPixelStorei(GL_PACK_ALIGNMENT, 1);
+
+      /* read the tile into the final image */
+      glReadPixels(srcX, srcY, srcWidth, srcHeight,
+                   tr->ImageFormat, tr->ImageType, tr->ImageBuffer);
+   }
+
+   /* restore previous glPixelStore values */
+   glPixelStorei(GL_PACK_ROW_LENGTH, prevRowLength);
+   glPixelStorei(GL_PACK_SKIP_ROWS, prevSkipRows);
+   glPixelStorei(GL_PACK_SKIP_PIXELS, prevSkipPixels);
+   glPixelStorei(GL_PACK_ALIGNMENT, prevAlignment);
+
+   /* increment tile counter, return 1 if more tiles left to render */
+   tr->CurrentTile++;
+   if (tr->CurrentTile >= tr->Rows * tr->Columns) {
+      /* restore user's viewport */
+      glViewport(tr->ViewportSave[0], tr->ViewportSave[1],
+                 tr->ViewportSave[2], tr->ViewportSave[3]);
+      tr->CurrentTile = -1;  /* all done */
+      return 0;
+   }
+   else
+      return 1;
+}
+
+
+/*
+ * Replacement for glRastePos3f() which avoids the problem with invalid
+ * raster pos.
+ */
+void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z)
+{
+   if (tr->CurrentTile<0) {
+      /* not doing tile rendering right now.  Let OpenGL do this. */
+      glRasterPos3f(x, y, z);
+   }
+   else {
+      GLdouble modelview[16], proj[16];
+      GLint viewport[4];
+      GLdouble winX, winY, winZ;
+
+      /* Get modelview, projection and viewport */
+      glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
+      glGetDoublev(GL_PROJECTION_MATRIX, proj);
+      viewport[0] = 0;
+      viewport[1] = 0;
+      viewport[2] = tr->CurrentTileWidth;
+      viewport[3] = tr->CurrentTileHeight;
+
+      /* Project object coord to window coordinate */
+      if (gluProject(x, y, z, modelview, proj, viewport, &winX, &winY, &winZ)){
+
+         /* set raster pos to window coord (0,0) */
+         glMatrixMode(GL_MODELVIEW);
+         glPushMatrix();
+         glLoadIdentity();
+         glMatrixMode(GL_PROJECTION);
+         glPushMatrix();
+         glLoadIdentity();
+         glOrtho(0.0, tr->CurrentTileWidth,
+                 0.0, tr->CurrentTileHeight, 0.0, 1.0);
+         glRasterPos3f(0.0, 0.0, -winZ);
+
+         /* Now use empty bitmap to adjust raster position to (winX,winY) */
+         {
+            GLubyte bitmap[1] = {0};
+            glBitmap(1, 1, 0.0, 0.0, winX, winY, bitmap);
+         }
+
+         /* restore original matrices */
+         glPopMatrix(); /*proj*/
+         glMatrixMode(GL_MODELVIEW);
+         glPopMatrix();
+      }
+#ifdef DEBUG
+      if (glGetError())
+         printf("GL error!\n");
+#endif
+   }
+}
+
diff --git a/src/gl/tr.h b/src/gl/tr.h
new file mode 100644
index 0000000..ef5f303
--- /dev/null
+++ b/src/gl/tr.h
@@ -0,0 +1,149 @@
+/* $Id: tr.h,v 1.5 1997/07/21 17:34:07 brianp Exp $ */
+
+/*
+ * $Log: tr.h,v $
+ * Revision 1.5  1997/07/21  17:34:07  brianp
+ * added tile borders, incremented version to 1.1
+ *
+ * Revision 1.4  1997/07/21  15:47:35  brianp
+ * renamed all "near" and "far" variables
+ *
+ * Revision 1.3  1997/04/26  21:23:25  brianp
+ * added trRasterPos3f function
+ *
+ * Revision 1.2  1997/04/19  23:26:10  brianp
+ * many API changes
+ *
+ * Revision 1.1  1997/04/18  21:53:05  brianp
+ * Initial revision
+ *
+ */
+
+
+/*
+ * Tiled Rendering library
+ * Version 1.1
+ * Copyright (C) Brian Paul
+ *
+ *
+ * This library allows one to render arbitrarily large images with OpenGL.
+ * The basic idea is to break the image into tiles which are rendered one
+ * at a time.  The tiles are assembled together to form the final, large
+ * image.  Tiles and images can be of any size.
+ *
+ * Basic usage:
+ *
+ * 1. Allocate a tile rendering context:
+ *       TRcontext t = trNew();
+ *
+ * 2. Specify the final image buffer and tile size:
+ *       GLubyte image[W][H][4]
+ *       trImageSize(t, W, H);
+ *       trImageBuffer(t, GL_RGBA, GL_UNSIGNED_BYTE, (GLubyte *) image);
+ *
+ * 3. Setup your projection:
+ *       trFrustum(t, left, right, bottom top, near, far);
+ *    or
+ *       trOrtho(t, left, right, bottom top, near, far);
+ *    or
+ *       trPerspective(t, fovy, aspect, near, far);
+ *
+ * 4. Render the tiles:
+ *       do {
+ *           trBeginTile(t);
+ *           DrawMyScene();
+ *       } while (trEndTile(t));
+ *
+ *    You provide the DrawMyScene() function which calls glClear() and
+ *    draws all your stuff.
+ *
+ * 5. The image array is now complete.  Display it, write it to a file, etc.
+ *
+ * 6. Delete the tile rendering context when finished:
+ *       trDelete(t);
+ *
+ */
+
+
+#ifndef TR_H
+#define TR_H
+
+
+#ifdef __APPLE__
+#include <OpenGL/gl.h>
+#else
+#include <GL/gl.h>
+#endif
+
+typedef struct _TRctx TRcontext;
+
+
+typedef enum {
+   TR_TILE_WIDTH = 100,
+   TR_TILE_HEIGHT,
+   TR_TILE_BORDER,
+   TR_IMAGE_WIDTH,
+   TR_IMAGE_HEIGHT,
+   TR_ROWS,
+   TR_COLUMNS,
+   TR_CURRENT_ROW,
+   TR_CURRENT_COLUMN,
+   TR_CURRENT_TILE_WIDTH,
+   TR_CURRENT_TILE_HEIGHT,
+   TR_ROW_ORDER,
+   TR_TOP_TO_BOTTOM,
+   TR_BOTTOM_TO_TOP
+} TRenum;
+
+
+
+extern TRcontext *trNew(void);
+
+extern void trDelete(TRcontext *tr);
+
+
+extern void trTileSize(TRcontext *tr, GLint width, GLint height, GLint border);
+
+extern void trTileBuffer(TRcontext *tr, GLenum format, GLenum type,
+			 GLvoid *image);
+
+
+extern void trImageSize(TRcontext *tr, GLint width, GLint height);
+
+extern void trImageBuffer(TRcontext *tr, GLenum format, GLenum type,
+			  GLvoid *image);
+
+
+extern void trRowOrder(TRcontext *tr, TRenum order);
+
+
+extern GLint trGet(TRcontext *tr, TRenum param);
+
+
+extern void trOrtho(TRcontext *tr,
+		    GLdouble left, GLdouble right,
+		    GLdouble bottom, GLdouble top,
+		    GLdouble zNear, GLdouble zFar);
+
+extern void trFrustum(TRcontext *tr,
+		      GLdouble left, GLdouble right,
+		      GLdouble bottom, GLdouble top,
+		      GLdouble zNear, GLdouble zFar);
+
+extern void trPerspective(TRcontext *tr,
+			  GLdouble fovy, GLdouble aspect,
+			  GLdouble zNear, GLdouble zFar );
+
+
+extern void trBeginTile(TRcontext *tr);
+
+//Returns zero if this was the last tile.
+extern int trEndTile(TRcontext *tr);
+
+
+extern void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z);
+
+
+
+
+#endif
diff --git a/src/gui/dialogs/ExportPos.cpp b/src/gui/dialogs/ExportPos.cpp
index e4e82f9..b8d765e 100644
--- a/src/gui/dialogs/ExportPos.cpp
+++ b/src/gui/dialogs/ExportPos.cpp
@@ -18,9 +18,9 @@
 
 
 #include "ExportPos.h"
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
-#include "wxcomponents.h"
+#include "wx/wxcomponents.h"
 #include "common/translation.h"
 
 #include <wx/treectrl.h>
diff --git a/src/gui/dialogs/ExportRngDialog.cpp b/src/gui/dialogs/ExportRngDialog.cpp
index a8a4df1..423583b 100644
--- a/src/gui/dialogs/ExportRngDialog.cpp
+++ b/src/gui/dialogs/ExportRngDialog.cpp
@@ -17,7 +17,7 @@
 */
 
 #include "ExportRngDialog.h"
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 
 #include "backend/filters/rangeFile.h"
diff --git a/src/gui/dialogs/StashDialog.cpp b/src/gui/dialogs/StashDialog.cpp
index f4c2efe..accfc58 100644
--- a/src/gui/dialogs/StashDialog.cpp
+++ b/src/gui/dialogs/StashDialog.cpp
@@ -18,8 +18,8 @@
 
 #include "StashDialog.h"
 
-#include "wxcommon.h"
-#include "wxcomponents.h"
+#include "wx/wxcommon.h"
+#include "wx/wxcomponents.h"
 #include "common/translation.h"
 
 #include "./backend/viscontrol.h"
@@ -48,7 +48,7 @@ StashDialog::StashDialog(wxWindow* parent, int id, const wxString& title, const
     label_6 = new wxStaticText(this, wxID_ANY, wxTRANS("Stashed Tree"));
     treeFilters = new wxTreeCtrl(this, ID_TREE_FILTERS, wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS|wxTR_NO_LINES|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER|wxTR_HIDE_ROOT);
     label_7 = new wxStaticText(this, wxID_ANY, wxTRANS("Properties"));
-    gridProperties = new wxPropertyGrid(this, ID_GRID_FILTER);
+    gridProperties = new wxCustomPropGrid(this, ID_GRID_FILTER);
     btnOK = new wxButton(this, wxID_OK, wxEmptyString);
 
     set_properties();
diff --git a/src/gui/dialogs/StashDialog.h b/src/gui/dialogs/StashDialog.h
index d340776..8be7b5c 100644
--- a/src/gui/dialogs/StashDialog.h
+++ b/src/gui/dialogs/StashDialog.h
@@ -67,7 +67,7 @@ protected:
     wxStaticText* label_6;
     wxTreeCtrl* treeFilters;
     wxStaticText* label_7;
-    wxPropertyGrid* gridProperties;
+    wxCustomPropGrid* gridProperties;
     wxButton* btnOK;
     // end wxGlade
 
diff --git a/src/gui/dialogs/animateFilterDialog.cpp b/src/gui/dialogs/animateFilterDialog.cpp
index fe76242..d4333df 100644
--- a/src/gui/dialogs/animateFilterDialog.cpp
+++ b/src/gui/dialogs/animateFilterDialog.cpp
@@ -32,7 +32,7 @@
 #include <wx/filename.h>
 #include "common/translation.h"
 #include "common/stringFuncs.h"
-#include "wxcomponents.h"
+#include "wx/wxcomponents.h"
 
 enum
 {
@@ -153,7 +153,7 @@ ExportAnimationDialog::ExportAnimationDialog(wxWindow* parent, int id, const wxS
     filterPropertySizer_staticbox = new wxStaticBox(filterLeftPane, -1, wxTRANS("Filters and properties"));
     filterTreeCtrl =new wxTreeCtrl(filterLeftPane,ID_FILTER_TREE_CTRL , wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS|wxTR_NO_LINES|wxTR_HIDE_ROOT|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER|wxTR_EDIT_LABELS);
 
-    propertyGrid = new wxPropertyGrid(filterLeftPane, ID_PROPERTY_GRID);
+    propertyGrid = new wxCustomPropGrid(filterLeftPane, ID_PROPERTY_GRID);
     animationGrid = new wxGrid(filterRightPane, ID_ANIMATION_GRID_CTRL);
     keyFrameRemoveButton = new wxButton(filterRightPane, wxID_REMOVE, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
     labelWorkDir = new wxStaticText(frameViewPane, wxID_ANY, wxTRANS("Dir : "));
@@ -163,7 +163,7 @@ ExportAnimationDialog::ExportAnimationDialog(wxWindow* parent, int id, const wxS
     outputDataSepLine = new wxStaticLine(frameViewPane, wxID_ANY);
     labelDataType = new wxStaticText(frameViewPane, wxID_ANY, wxTRANS("Data Types:"));
     checkImageOutput = new wxCheckBox(frameViewPane, ID_CHECK_IMAGE_OUT, wxTRANS("3D Images"));
-    lblImageName = new wxStaticText(frameViewPane, wxID_ANY, wxTRANS("File Prefix: "));
+    lblImageName = new wxStaticText(frameViewPane, wxID_ANY, wxTRANS("File Suffix: "));
     textImageName = new wxTextCtrl(frameViewPane, ID_TEXTBOX_IMAGEPREFIX, wxEmptyString);
     labelImageSize = new wxStaticText(frameViewPane, wxID_ANY, wxTRANS("Size : "));
     textImageSize = new wxTextCtrl(frameViewPane, ID_TEXTBOX_IMAGESIZE, wxEmptyString);
@@ -189,7 +189,7 @@ ExportAnimationDialog::ExportAnimationDialog(wxWindow* parent, int id, const wxS
     comboRangeFormat = new wxChoice(frameViewPane, ID_COMBO_RANGE_TYPE, wxDefaultPosition, wxDefaultSize, rangeNames);
     static_line_1 = new wxStaticLine(frameViewPane, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL);
     labelFrame = new wxStaticText(frameViewPane, wxID_ANY, wxTRANS("Frame"));
-    frameSlider = new wxSlider(frameViewPane, ID_FRAME_SLIDER, 1, 1, 1);
+    frameSlider = new wxSlider(frameViewPane, ID_FRAME_SLIDER, 0, 0, 1);
     textFrame = new wxTextCtrl(frameViewPane, ID_FRAME_TEXTBOX, wxEmptyString);
     framePropGrid = new wxGrid(frameViewPane, ID_FILTER_PROPERTY_VALUE_GRID);
     cancelButton = new wxButton(this, wxID_CANCEL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
@@ -743,7 +743,7 @@ void ExportAnimationDialog::OnFilterGridCellEditorShow(wxGridEvent &event)
 		{
 			//Create and show the string keyframe input dialog
 			StringKeyFrameDialog *sd = new StringKeyFrameDialog(this,
-					wxID_ANY,_(""));
+					wxID_ANY,wxT(""));
 
 			if(sd->ShowModal() != wxID_OK)
 			{
@@ -853,7 +853,6 @@ void ExportAnimationDialog::OnButtonKeyFrameRemove(wxCommandEvent &event)
 
 	//Row prefix or header selection
 	const wxArrayInt& selectedRows(animationGrid->GetSelectedRows());
-	const wxGridCellCoordsArray& cells(animationGrid->GetSelectedCells());
 
 	vector<size_t> rowsToKill;
 	
@@ -1031,7 +1030,7 @@ void ExportAnimationDialog::OnBtnResolution(wxCommandEvent &event)
 {
 	ResolutionDialog *r = new ResolutionDialog(this,wxID_ANY,wxT("Choose Resolution"));
 
-	r->setRes(imageWidth,imageHeight);
+	r->setRes(imageWidth,imageHeight,true);
 
 	if(r->ShowModal() != wxID_OK)
 	{
@@ -1119,8 +1118,8 @@ void ExportAnimationDialog::set_properties()
     textWorkDir->SetToolTip(wxTRANS("Enter where the animation frames will be exported to"));
     buttonWorkDir->SetToolTip(wxTRANS("Browse to directory where the animation frames will be exported to"));
     checkImageOutput->SetValue(1);
-    textImageName->SetToolTip(wxTRANS("Enter a descriptive name for output files"));
-    textImageSize->SetToolTip(wxTRANS("Enter the target resoltuion (image size)"));
+    textImageName->SetToolTip(wxTRANS("Title for files, result will be saved as #-name.png, where # is image number."));
+    textImageSize->SetToolTip(wxTRANS("Target resolution (image size)"));
     comboRangeFormat->SetSelection(-1);
     frameSlider->SetToolTip(wxTRANS("Select frame for property display"));
     textFrame->SetToolTip(wxTRANS("Enter frame number to change frame (eg 1/20)"));
diff --git a/src/gui/dialogs/animateFilterDialog.h b/src/gui/dialogs/animateFilterDialog.h
index 25b3596..4508ca4 100644
--- a/src/gui/dialogs/animateFilterDialog.h
+++ b/src/gui/dialogs/animateFilterDialog.h
@@ -165,7 +165,7 @@ protected:
     wxStaticBox* keyFramesSizer_staticbox;
     wxStaticBox* filterPropertySizer_staticbox;
     wxTreeCtrl* filterTreeCtrl;
-    wxPropertyGrid* propertyGrid;
+    wxCustomPropGrid* propertyGrid;
     wxPanel* filterLeftPane;
     wxGrid* animationGrid;
     wxButton* keyFrameRemoveButton;
diff --git a/src/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp b/src/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
index 0d0f269..147f1f9 100644
--- a/src/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
+++ b/src/gui/dialogs/animateSubDialogs/choiceKeyFrameDialog.cpp
@@ -23,7 +23,7 @@
 
 // end wxGlade
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 
 ChoiceKeyFrameDialog::ChoiceKeyFrameDialog(wxWindow* parent, int id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
diff --git a/src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp b/src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
index 5e44c58..f640e72 100644
--- a/src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
+++ b/src/gui/dialogs/animateSubDialogs/colourKeyFrameDialog.cpp
@@ -19,7 +19,7 @@
 
 #include "colourKeyFrameDialog.h"
 #include "common/stringFuncs.h"
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 #include "common/translation.h"
 
 #include <wx/colordlg.h>
@@ -60,7 +60,7 @@ ColourKeyFrameDialog::ColourKeyFrameDialog(wxWindow* parent, int id, const wxStr
         wxTRANS("Step"),
         wxTRANS("Ramp")
     };
-	comboTransition = new wxComboBox(this, ID_COMBO_TRANSITION, _(""), wxDefaultPosition, wxDefaultSize, 2, comboTransition_choices, wxCB_DROPDOWN|wxCB_READONLY);
+	comboTransition = new wxComboBox(this, ID_COMBO_TRANSITION, wxT(""), wxDefaultPosition, wxDefaultSize, 2, comboTransition_choices, wxCB_DROPDOWN|wxCB_READONLY);
 	labelFrameStart = new wxStaticText(this, wxID_ANY, wxTRANS("Start Frame"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
 	textFrameStart = new wxTextCtrl(this, ID_TEXT_FRAME_START, wxEmptyString);
 	labelFrameEnd = new wxStaticText(this, wxID_ANY, wxTRANS("End Frame"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT);
@@ -167,6 +167,8 @@ void ColourKeyFrameDialog::OnBtnStartColour(wxCommandEvent &event)
 		
 		updateButtonColours();
 	}
+
+	delete colDg;
 }
 
 
diff --git a/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h b/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h
index 3ef5475..e79ef1e 100644
--- a/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h
+++ b/src/gui/dialogs/animateSubDialogs/realKeyFrameDialog.h
@@ -22,7 +22,7 @@
 // begin wxGlade: ::dependencies
 // end wxGlade
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 enum
 {
diff --git a/src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp b/src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
index a7a56bf..5586a69 100644
--- a/src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
+++ b/src/gui/dialogs/animateSubDialogs/stringKeyFrameDialog.cpp
@@ -21,7 +21,7 @@
 
 #include "common/translation.h"
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 using std::string;
 using std::vector;
@@ -78,7 +78,11 @@ BEGIN_EVENT_TABLE(StringKeyFrameDialog, wxDialog)
 	EVT_TEXT(ID_TEXT_FROM_FILE, StringKeyFrameDialog::OnTextFilename)
 	EVT_BUTTON(wxID_OPEN, StringKeyFrameDialog::OnBtnChooseFile)
 	EVT_RADIOBUTTON(ID_RADIO_FROM_TABLE, StringKeyFrameDialog::OnTableRadio)
+#if wxCHECK_VERSION(2,9,0)
+	EVT_GRID_CMD_CELL_CHANGED(ID_GRID_STRINGS, StringKeyFrameDialog::OnGridCellChange)
+#else
 	EVT_GRID_CMD_CELL_CHANGE(ID_GRID_STRINGS, StringKeyFrameDialog::OnGridCellChange)
+#endif
 	EVT_GRID_CMD_EDITOR_SHOWN(ID_GRID_STRINGS, StringKeyFrameDialog::OnGridEditorShown)
 	EVT_BUTTON(wxID_ADD, StringKeyFrameDialog::OnBtnAdd)
 	EVT_BUTTON(wxID_REMOVE, StringKeyFrameDialog::OnBtnRemove)
diff --git a/src/gui/dialogs/autosaveDialog.cpp b/src/gui/dialogs/autosaveDialog.cpp
index 7ff8820..b358920 100644
--- a/src/gui/dialogs/autosaveDialog.cpp
+++ b/src/gui/dialogs/autosaveDialog.cpp
@@ -18,7 +18,7 @@
 // -*- C++ -*- generated by wxGlade 0.6.5 on Thu Jun  7 12:47:44 2012
 
 #include "autosaveDialog.h"
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 #include "common/translation.h"
 // begin wxGlade: ::extracode
 
diff --git a/src/gui/dialogs/filterErrorDialog.cpp b/src/gui/dialogs/filterErrorDialog.cpp
index 345a5cc..c4ac665 100644
--- a/src/gui/dialogs/filterErrorDialog.cpp
+++ b/src/gui/dialogs/filterErrorDialog.cpp
@@ -18,7 +18,7 @@
 // -*- C++ -*- generated by wxGlade 0.6.3 on Sun Jun 24 00:03:00 2012
 
 #include "filterErrorDialog.h"
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 #include "common/translation.h"
 //Art for buttons
 #include <wx/artprov.h>
diff --git a/src/gui/dialogs/prefDialog.cpp b/src/gui/dialogs/prefDialog.cpp
index 327bc30..ba93f62 100644
--- a/src/gui/dialogs/prefDialog.cpp
+++ b/src/gui/dialogs/prefDialog.cpp
@@ -24,8 +24,8 @@
 #include "backend/viscontrol.h"
 #include "common/stringFuncs.h"
 
-#include "wxcommon.h"
-#include "wxcomponents.h"
+#include "wx/wxcommon.h"
+#include "wx/wxcomponents.h"
 
 #include <wx/colordlg.h>
 
@@ -46,6 +46,7 @@ enum
 	ID_START_CHECK_PLOTLIST,
 	ID_START_CHECK_RAWDATA,
 	ID_START_COMBO_PANEL,
+	ID_CHECK_PREFER_ORTHO,
 	ID_MOUSE_MOVE_SLIDER,
 	ID_MOUSE_ZOOM_SLIDER,
 };
@@ -69,15 +70,16 @@ PrefDialog::PrefDialog(wxWindow* parent, int id, const wxString& title, const wx
     notePrefPanels_pane_3 = new wxPanel(notePrefPanels, wxID_ANY);
 	panelStartup = new wxPanel(notePrefPanels, wxID_ANY);
 	panelFilters = new wxPanel(notePrefPanels, wxID_ANY);
+	sizer_2_staticbox = new wxStaticBox(panelStartup, -1, wxTRANS("Panel Display"));
 #ifndef DISABLE_ONLINE_UPDATE
 	updateSizer_staticbox = new wxStaticBox(panelStartup, -1, wxTRANS("Online Updates"));
 #endif
-	sizer_2_staticbox = new wxStaticBox(panelStartup, -1, wxTRANS("Panel Display"));
-    sizerCamSpeed_staticbox = new wxStaticBox(notePrefPanels_pane_3, -1, wxTRANS("Camera Speed"));
+    	sizer_7_staticbox = new wxStaticBox(notePrefPanels_pane_3, wxID_ANY, wxTRANS("Startup"));
+    	sizerCamSpeed_staticbox = new wxStaticBox(notePrefPanels_pane_3, -1, wxTRANS("Camera Speed"));
 	filterPropSizer_staticbox = new wxStaticBox(panelFilters, -1, wxTRANS("Filter Defaults"));
 	lblFilters = new wxStaticText(panelFilters, wxID_ANY, wxTRANS("Available Filters"));
 	listFilters = new wxListBox(panelFilters, ID_LIST_FILTERS, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE|wxLB_SORT);
-	filterGridProperties = new wxPropertyGrid(panelFilters, ID_GRID_PROPERTIES);
+	filterGridProperties = new wxCustomPropGrid(panelFilters, ID_GRID_PROPERTIES);
 	filterBtnResetAllFilters = new wxButton(panelFilters, ID_BTN_RESET_FILTER_ALL, wxTRANS("Reset All"));
 	filterResetDefaultFilter = new wxButton(panelFilters, ID_BTN_RESET_FILTER, wxTRANS("Reset"));
 	const wxString comboPanelStartMode_choices[] = {
@@ -92,6 +94,7 @@ PrefDialog::PrefDialog(wxWindow* parent, int id, const wxString& title, const wx
 #ifndef DISABLE_ONLINE_UPDATE
 	checkAllowOnlineUpdate = new wxCheckBox(panelStartup, wxID_ANY, wxTRANS("Periodically notify about available updates"));
 #endif
+    	chkPreferOrtho = new wxCheckBox(notePrefPanels_pane_3, wxID_ANY, wxTRANS("Prefer orthographic at startup"));
 	lblMoveSpeed = new wxStaticText(notePrefPanels_pane_3, wxID_ANY, wxTRANS("Move Rate"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
 	labelSlowCamMoveRate = new wxStaticText(notePrefPanels_pane_3,wxID_ANY, wxTRANS("(slow)"));
 	sliderCamMoveRate = new wxSlider(notePrefPanels_pane_3, ID_MOUSE_MOVE_SLIDER, 25, 1, 400,wxDefaultPosition,wxDefaultSize,wxSL_HORIZONTAL|wxSL_LABELS);
@@ -131,11 +134,16 @@ PrefDialog::~PrefDialog()
 BEGIN_EVENT_TABLE(PrefDialog, wxDialog)
     // begin wxGlade: PrefDialog::event_table
     EVT_LISTBOX(ID_LIST_FILTERS, PrefDialog::OnFilterListClick)
+#if wxCHECK_VERSION(2,9,0)
+    EVT_GRID_CMD_CELL_CHANGED(ID_GRID_PROPERTIES, PrefDialog::OnFilterCellChange)
+#else
     EVT_GRID_CMD_CELL_CHANGE(ID_GRID_PROPERTIES, PrefDialog::OnFilterCellChange)
+#endif
     EVT_GRID_CMD_EDITOR_SHOWN(ID_GRID_PROPERTIES,PrefDialog::OnFilterGridCellEditorShow)
     EVT_BUTTON(ID_BTN_RESET_FILTER,PrefDialog::OnResetFilterButton)
     EVT_BUTTON(ID_BTN_RESET_FILTER_ALL,PrefDialog::OnResetFilterAllButton)
     EVT_COMBOBOX(ID_START_COMBO_PANEL, PrefDialog::OnStartupPanelCombo)
+    EVT_CHECKBOX(ID_CHECK_PREFER_ORTHO, PrefDialog::OnCheckPreferOrtho)
     EVT_COMMAND_SCROLL(ID_MOUSE_ZOOM_SLIDER, PrefDialog::OnMouseZoomSlider)
     EVT_COMMAND_SCROLL(ID_MOUSE_MOVE_SLIDER, PrefDialog::OnMouseMoveSlider)
     // end wxGlade
@@ -462,6 +470,13 @@ void PrefDialog::updateFilterProp(const Filter *f)
 
 //-------------- End Filter page-----------------------
 
+void PrefDialog::OnCheckPreferOrtho(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnCheckPreferOrtho) not implemented yet"));
+}
+
 //-------------- Startup panel page-----------------------
 
 void PrefDialog::OnStartupPanelCombo(wxCommandEvent &event)
@@ -545,6 +560,7 @@ void PrefDialog::set_properties()
 #ifndef DISABLE_ONLINE_UPDATE
     checkAllowOnlineUpdate->SetToolTip(wxTRANS("Lets the program check the internet to see if updates to the program version are available, then notifies you about updates now and again."));
 #endif
+    chkPreferOrtho->SetToolTip(wxTRANS("By default, use an orthographic camera at startup. State files will override this preference."));
     sliderCamMoveRate->SetToolTip(wxTRANS("Camera translation, orbit and swivel rates. "));
     sliderCamZoomRate->SetToolTip(wxTRANS("Camera zooming rate."));
 
@@ -560,9 +576,13 @@ void PrefDialog::do_layout()
 	// begin wxGlade: PrefDialog::do_layout
 	wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL);
 	wxBoxSizer* exitButtonSizer = new wxBoxSizer(wxHORIZONTAL);
+    	wxBoxSizer* sizer_5 = new wxBoxSizer(wxVERTICAL);
+    	sizerCamSpeed_staticbox->Lower();
 	wxStaticBoxSizer* sizerCamSpeed = new wxStaticBoxSizer(sizerCamSpeed_staticbox, wxVERTICAL);
 	wxBoxSizer* sizer_6_copy = new wxBoxSizer(wxHORIZONTAL);
 	wxBoxSizer* sizer_6 = new wxBoxSizer(wxHORIZONTAL);
+    	sizer_7_staticbox->Lower();
+    	wxStaticBoxSizer* sizer_7 = new wxStaticBoxSizer(sizer_7_staticbox, wxHORIZONTAL);
 	wxBoxSizer* sizer_1 = new wxBoxSizer(wxVERTICAL);
 #ifndef DISABLE_ONLINE_UPDATE
 	wxStaticBoxSizer* updateSizer = new wxStaticBoxSizer(updateSizer_staticbox, wxVERTICAL);
@@ -570,6 +590,7 @@ void PrefDialog::do_layout()
 	wxStaticBoxSizer* sizer_2 = new wxStaticBoxSizer(sizer_2_staticbox, wxVERTICAL);
 	wxBoxSizer* sizer_3 = new wxBoxSizer(wxHORIZONTAL);
 	wxBoxSizer* sizer_4 = new wxBoxSizer(wxVERTICAL);
+    filterPropSizer_staticbox->Lower();
 	wxStaticBoxSizer* filterPropSizer = new wxStaticBoxSizer(filterPropSizer_staticbox, wxHORIZONTAL);
 	wxBoxSizer* filterRightSideSizer = new wxBoxSizer(wxVERTICAL);
 	wxBoxSizer* resetButtonSizer = new wxBoxSizer(wxHORIZONTAL);
@@ -585,7 +606,12 @@ void PrefDialog::do_layout()
 	filterRightSideSizer->Add(resetButtonSizer, 0, wxEXPAND, 0);
 	filterPropSizer->Add(filterRightSideSizer, 2, wxEXPAND, 0);
 	panelFilters->SetSizer(filterPropSizer);
-	sizer_2->Add(comboPanelStartMode, 0, 0, 0);
+#if defined(__WIN32) || defined(__WIN64)
+	sizer_2->Add(comboPanelStartMode, 0, wxBOTTOM|wxFIXED_MINSIZE, 4);
+#else
+	sizer_2->Add(comboPanelStartMode, 0, 0,0);
+
+#endif
 	sizer_3->Add(20, 20, 0, 0, 0);
 	sizer_4->Add(chkControl, 0, 0, 0);
 	sizer_4->Add(chkRawData, 0, 0, 0);
@@ -598,19 +624,33 @@ void PrefDialog::do_layout()
 	sizer_1->Add(updateSizer, 0, wxALL|wxEXPAND, 5);
 #endif
 	panelStartup->SetSizer(sizer_1);
-	sizer_6->Add(lblMoveSpeed, 0, wxALIGN_CENTER_VERTICAL, 0);
+	sizer_7->Add(chkPreferOrtho, 0, wxALL, 5);
+	sizer_5->Add(sizer_7, 0, wxEXPAND, 0);
+	sizer_6->Add(lblMoveSpeed, 0, 0, 0);
 	sizer_6->Add(20, 20, 0, 0, 0);
-	sizer_6->Add(labelSlowCamMoveRate, 0, wxALIGN_CENTER_VERTICAL, 0);
-	sizer_6->Add(sliderCamMoveRate, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 0);
-	sizer_6->Add(labelFastCamMoveRate, 0, wxALIGN_CENTER_VERTICAL, 0);
+	sizer_6->Add(labelSlowCamMoveRate, 0, 0, 0);
+#if defined(__WIN32) || defined(__WIN64)
+	sizer_6->Add(sliderCamMoveRate, 1, 0, 0);
+#else
+	sizer_6->Add(sliderCamMoveRate, 1, wxEXPAND|0, 0);
+#endif
+	sizer_6->Add(labelFastCamMoveRate, 0, 0, 0);
+	sizerCamSpeed->AddStretchSpacer();
 	sizerCamSpeed->Add(sizer_6, 1, wxEXPAND, 0);
-	sizer_6_copy->Add(lblZoomSpeed, 0, wxALIGN_CENTER_VERTICAL, 0);
+	sizerCamSpeed->AddStretchSpacer();
+	sizer_6_copy->Add(lblZoomSpeed, 0, 0, 0);
 	sizer_6_copy->Add(20, 20, 0, 0, 0);
-	sizer_6_copy->Add(labelSlowCamZoomRate, 0, wxALIGN_CENTER_VERTICAL, 0);
-	sizer_6_copy->Add(sliderCamZoomRate, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 0);
-	sizer_6_copy->Add(labelSlowFastZoomRate, 0, wxALIGN_CENTER_VERTICAL, 0);
+	sizer_6_copy->Add(labelSlowCamZoomRate, 0, 0, 0);
+#if defined(__WIN32) || defined(__WIN64)
+	sizer_6_copy->Add(sliderCamZoomRate, 1, wxEXPAND|0, 0);
+#else
+	sizer_6_copy->Add(sliderCamZoomRate, 1, 0, 0);
+#endif
+	sizer_6_copy->Add(labelSlowFastZoomRate, 0, 0, 0);
 	sizerCamSpeed->Add(sizer_6_copy, 1, wxEXPAND, 0);
-	notePrefPanels_pane_3->SetSizer(sizerCamSpeed);
+	sizerCamSpeed->AddStretchSpacer();
+    sizer_5->Add(sizerCamSpeed, 1, wxEXPAND, 0);
+    notePrefPanels_pane_3->SetSizer(sizer_5);
 	notePrefPanels->AddPage(panelFilters, wxTRANS("Pref"));
 	notePrefPanels->AddPage(panelStartup, wxTRANS("Startup"));
 	notePrefPanels->AddPage(notePrefPanels_pane_3, wxTRANS("Camera"));
diff --git a/src/gui/dialogs/prefDialog.h b/src/gui/dialogs/prefDialog.h
index 191c4c4..a473db2 100644
--- a/src/gui/dialogs/prefDialog.h
+++ b/src/gui/dialogs/prefDialog.h
@@ -23,7 +23,7 @@
 #include <wx/wx.h>
 // begin wxGlade: ::dependencies
 #include <wx/notebook.h>
-#include "wxcomponents.h"
+#include "wx/wxcomponents.h"
 // end wxGlade
 
 class Filter;
@@ -67,12 +67,13 @@ private:
 protected:
     // begin wxGlade: PrefDialog::attributes
     wxStaticBox* sizerCamSpeed_staticbox;
+    wxStaticBox* sizer_7_staticbox;
     wxStaticBox* updateSizer_staticbox;
     wxStaticBox* sizer_2_staticbox;
     wxStaticBox* filterPropSizer_staticbox;
     wxStaticText* lblFilters;
     wxListBox* listFilters;
-    wxPropertyGrid* filterGridProperties;
+    wxCustomPropGrid* filterGridProperties;
     wxButton* filterBtnResetAllFilters;
     wxButton* filterResetDefaultFilter;
     wxPanel* panelFilters;
@@ -84,18 +85,19 @@ protected:
     wxCheckBox* checkAllowOnlineUpdate;
 #endif
     wxPanel* panelStartup;
+    wxCheckBox* chkPreferOrtho;
     wxStaticText* lblMoveSpeed;
-    wxNotebook* notePrefPanels;
-    wxButton* btnOK;
-    wxButton* btnCancel;
+    wxStaticText* labelSlowCamMoveRate;
     wxSlider* sliderCamMoveRate;
     wxStaticText* labelFastCamMoveRate;
-    wxStaticText* labelSlowCamMoveRate;
     wxStaticText* lblZoomSpeed;
     wxStaticText* labelSlowCamZoomRate;
     wxSlider* sliderCamZoomRate;
     wxStaticText* labelSlowFastZoomRate;
     wxPanel* notePrefPanels_pane_3;
+    wxNotebook* notePrefPanels;
+    wxButton* btnOK;
+    wxButton* btnCancel;
     // end wxGlade
 
 	DECLARE_EVENT_TABLE();
@@ -103,10 +105,10 @@ protected:
 public:
 	// begin wxGlade: PrefDialog::ids
 	// end wxGlade
-	PrefDialog(wxWindow* parent, int id=wxID_ANY, const wxString& title=_(""), const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);
+	PrefDialog(wxWindow* parent, int id=wxID_ANY, const wxString& title=wxT(""), const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);
 	virtual ~PrefDialog();
-	virtual void OnFilterListClick(wxCommandEvent &event); // wxGlade: <event_handler>
 	virtual void OnFilterCellChange(wxGridEvent &event); // wxGlade: <event_handler>
+	virtual void OnFilterListClick(wxCommandEvent &event); // wxGlade: <event_handler>
 	virtual void OnFilterGridCellEditorShow(wxGridEvent &event); // wxGlade: <event_handler>
 	virtual void OnResetFilterButton(wxCommandEvent &event); // wxGlade: <event_handler>
 	virtual void OnResetFilterAllButton(wxCommandEvent &event); // wxGlade: <event_handler>
@@ -128,10 +130,14 @@ public:
 	void setMouseZoomRate(unsigned int rate) { mouseZoomRatePercent=rate;};
 	void setMouseMoveRate(unsigned int rate) { mouseMoveRatePercent=rate;};
 
+	bool getPreferOrthoCam() const { return chkPreferOrtho->IsChecked();}
+	void setPreferOrthoCam(bool prefer) const { return chkPreferOrtho->SetValue(prefer);}
+
 	unsigned int getMouseZoomRate() const { return  mouseZoomRatePercent;};
 	unsigned int getMouseMoveRate() const { return mouseMoveRatePercent;};
 
 	virtual void OnStartupPanelCombo(wxCommandEvent &event); // wxGlade: <event_handler>
+    	virtual void OnCheckPreferOrtho(wxCommandEvent &event); // wxGlade: <event_handler>
 	void OnMouseMoveSlider(wxScrollEvent &event);
 	void OnMouseZoomSlider(wxScrollEvent &event);
 
diff --git a/src/gui/dialogs/rangeEditDialog.cpp b/src/gui/dialogs/rangeEditDialog.cpp
new file mode 100644
index 0000000..275d713
--- /dev/null
+++ b/src/gui/dialogs/rangeEditDialog.cpp
@@ -0,0 +1,1623 @@
+/*
+ *	rangeEditDialog.h - Point data export dialog
+ *	Copyright (C) 2013, D Haley 
+
+ *	This program is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
+
+ *	This program is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
+
+ *	You should have received a copy of the GNU General Public License
+ *	along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "rangeEditDialog.h"
+
+#include "wx/wxcommon.h"
+#include "wx/wxcomponents.h"
+#include "common/translation.h"
+
+#include "backend/filters/rangeFile.h"
+
+#include <wx/colordlg.h>
+
+#include <set>
+
+using std::pair;
+using std::endl;
+
+// begin wxGlade: ::extracode
+enum
+{
+	ID_CHECK_SHOW_OVERLAY=wxID_ANY+1,
+	ID_SPLIT_LEFTRIGHT,
+	ID_GRID_IONS,
+	ID_GRID_RANGES,
+	ID_BTN_RANGE_ADD,
+	ID_BTN_RANGE_REMOVE,
+	ID_LIST_OVERLAY,
+	ID_LIST_PLOTS,
+	ID_MANAGE_SET_MORE,
+	ID_TEXT_FILTER_CMPNT,
+	ID_PLOT_AREA,
+};
+// end wxGlade
+
+
+enum
+{
+	ION_COL_PLOT=0,
+	ION_COL_SHORTNAME,
+	ION_COL_LONGNAME,
+	ION_COL_COLOUR,
+	ION_COL_ENUM_END
+};
+
+enum
+{
+	RNG_COL_PLOT=0,
+	RNG_COL_PARENT_ION,
+	RNG_COL_START,
+	RNG_COL_END,
+	RNG_COL_ENUM_END
+};
+
+enum
+{
+	GRID_FOCUS_NONE,
+	GRID_FOCUS_IONS,
+	GRID_FOCUS_RANGES
+};
+
+//Rangefile filter -> range file mapping typedef
+typedef map<const RangeFileFilter *, RangeFile> RFMAP ;
+
+
+PendingRange::PendingRange(RangeFile *rng)
+{
+	validStart=false;
+	validEnd=false;
+	validParent=false;
+	rngPtr=rng;
+}
+
+void PendingRange::commit()
+{
+	ASSERT(isFinished());
+	rngPtr->addRange(start,end,parentId);
+}
+
+float PendingRange::getStart() const
+{
+	if(validStart)
+		return start;
+	else
+		return 0.0f;
+}
+
+float PendingRange::getEnd() const
+{
+	if(validEnd)
+		return end;
+	else
+		return 1.0f;
+}
+
+std::string PendingRange::getIonName() const
+{
+	if(!validParent)
+		return "";
+
+	ASSERT(parentId < rngPtr->getNumIons());
+
+	return rngPtr->getName(parentId);
+
+}
+
+bool PendingRange::isFinished() const
+{
+	if(!validEnd || !validStart)
+		return false;
+
+	if(!validParent)
+		return false;
+
+	if( end <=start)
+		return false;
+
+	return true;
+}
+
+PendingIon::PendingIon(RangeFile *rng)
+{
+	rngPtr=rng;
+	validColour=validShortName=validLongName=false;
+
+	colour.red=colour.green=colour.blue=0.5f;
+}
+
+void PendingIon::setShortName(const std::string &n)
+{
+	shortName=n;
+	validShortName = (rngPtr->getIonID(shortName.c_str()) == (unsigned int)-1);
+}
+
+void PendingIon::setLongName(const std::string &n)
+{
+	longName=n;
+	validLongName = (rngPtr->getIonID(shortName.c_str(),false) == (unsigned int)-1);
+}
+
+void PendingIon::setColour(const RGBf &c)
+{
+	colour=c;
+	validColour=true;
+}
+
+RGBf PendingIon::getColour() const
+{
+	return colour;
+}
+
+std::string PendingIon::getShortName() const
+{
+	if(validShortName)
+		return shortName; 
+	else
+		return string("");
+}
+
+std::string PendingIon::getLongName() const
+{
+	if(validLongName)
+		return longName; 
+	else
+		return string("");
+}
+
+bool PendingIon::isFinished() const
+{
+	//Check to see if we have valid user data
+	if (! (validShortName && validLongName && validColour))
+		return false;
+
+	//Disallow existing ion names
+	if(rngPtr->getIonID(longName.c_str(),false) != (unsigned int)-1 ||
+		rngPtr->getIonID(shortName.c_str()) != (unsigned int) -1)
+		return false;
+
+	return true;
+}
+
+void PendingIon::commit() const
+{
+	rngPtr->addIon(shortName,longName,colour);
+}
+
+RangeEditorDialog::RangeEditorDialog(wxWindow* parent, int id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
+    wxDialog(parent, id, title, pos, size, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX)
+{
+    // begin wxGlade: RangeEditorDialog::RangeEditorDialog
+    splitVertical = new wxSplitterWindow(this, ID_SPLIT_LEFTRIGHT, wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_BORDER);
+    panelSplitRight = new wxPanel(splitVertical, wxID_ANY);
+    panelSplitLeft = new wxPanel(splitVertical, wxID_ANY);
+    notebookLeft = new wxNotebook(panelSplitLeft, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_LEFT);
+    noteLeftOverlay = new wxPanel(notebookLeft, wxID_ANY);
+    noteLeftRanges = new wxPanel(notebookLeft, wxID_ANY);
+    noteLeftPlots = new wxPanel(notebookLeft, wxID_ANY);
+    listPlots = new wxListBox(noteLeftPlots, ID_LIST_PLOTS, wxDefaultPosition, wxDefaultSize, 0, NULL);
+    gridIons= new wxGrid(noteLeftRanges, ID_GRID_IONS);
+    gridRanges = new wxGrid(noteLeftRanges, ID_GRID_RANGES);
+    btnRangeIonAdd = new wxButton(noteLeftRanges,wxID_ADD, wxEmptyString);
+    btnRangeIonRemove = new wxButton(noteLeftRanges, wxID_REMOVE, wxEmptyString);
+    checkShowOverlay = new wxCheckBox(noteLeftOverlay, ID_CHECK_SHOW_OVERLAY, wxTRANS("Show Overlays"));
+    textOverlayCmpnt = new wxTextCtrl(noteLeftOverlay, ID_TEXT_FILTER_CMPNT, wxEmptyString,
+    						wxDefaultPosition,wxDefaultSize,wxTE_PROCESS_ENTER);
+    listOverlay = new wxCheckListBox(noteLeftOverlay, ID_LIST_OVERLAY, wxDefaultPosition, wxDefaultSize, 0);
+    plotPanel = new MathGLPane(panelSplitRight, ID_PLOT_AREA);
+    btnOK = new wxButton(panelSplitRight, wxID_OK, wxEmptyString);
+    btnCancel = new wxButton(panelSplitRight, wxID_CANCEL, wxEmptyString);
+
+    set_properties();
+    do_layout();
+    // end wxGlade
+
+    std::string fileLoc = locateDataFile("naturalAbundance.xml");
+    if(!fileLoc.empty())
+	    abundanceData.open(fileLoc.c_str());
+
+    UpdateHandler h = (UpdateHandler)&RangeEditorDialog::onPlotUpdate;
+    plotPanel->registerUpdateHandler(this,h);
+    plotPanel->enableRegionSelfUpdate(true);
+
+    lastFocused=GRID_FOCUS_NONE;
+    currentRange=0;
+    checkShowOverlay->SetValue(true);
+
+    haveSetTextFocus=false;
+    textOverlayCmpnt->SetValue(wxTRANS("e.g. H2O"));
+
+#if wxCHECK_VERSION(2, 9, 0)
+    textOverlayCmpnt->Bind(wxEVT_SET_FOCUS, &RangeEditorDialog::OnTextOverlaySetFocus, this);
+#else
+    textOverlayCmpnt->Connect(wxID_ANY,
+                 wxEVT_SET_FOCUS,
+		   wxFocusEventHandler(RangeEditorDialog::OnTextOverlaySetFocus), NULL, this);
+#endif
+}
+
+
+
+RangeEditorDialog::~RangeEditorDialog()
+{
+#if wxCHECK_VERSION(2, 9, 0)
+    textOverlayCmpnt->Unbind(wxEVT_SET_FOCUS, &RangeEditorDialog::OnTextOverlaySetFocus, this);
+#else
+    textOverlayCmpnt->Disconnect();
+#endif
+}
+
+
+BEGIN_EVENT_TABLE(RangeEditorDialog, wxDialog)
+    // begin wxGlade: RangeEditorDialog::event_table
+    EVT_LISTBOX(ID_LIST_PLOTS, RangeEditorDialog::OnListPlots)
+//    EVT_LIST_ITEM_SELECTED(ID_LIST_OVERLAY, RangeEditorDialog::OnListOverlaySelected)
+    EVT_LIST_KEY_DOWN(ID_LIST_OVERLAY, RangeEditorDialog::OnListOverlayKeyDown) 
+    EVT_TEXT(ID_TEXT_FILTER_CMPNT,RangeEditorDialog::OnTextOverlay)
+    EVT_TEXT(ID_TEXT_FILTER_CMPNT,RangeEditorDialog::OnTextOverlay)
+    EVT_TEXT_ENTER(ID_TEXT_FILTER_CMPNT,RangeEditorDialog::OnTextOverlayEnter)
+    EVT_CHECKBOX(ID_CHECK_SHOW_OVERLAY, RangeEditorDialog::OnCheckShowOverlay)
+#if wxCHECK_VERSION(2,9,0)
+    EVT_GRID_CMD_CELL_CHANGED(ID_GRID_RANGES, RangeEditorDialog::OnGridRangesCellChange)
+    EVT_GRID_CMD_CELL_CHANGED(ID_GRID_IONS, RangeEditorDialog::OnGridIonsCellChange)
+#else
+    EVT_GRID_CMD_CELL_CHANGE(ID_GRID_RANGES, RangeEditorDialog::OnGridRangesCellChange)
+    EVT_GRID_CMD_CELL_CHANGE(ID_GRID_IONS, RangeEditorDialog::OnGridIonsCellChange)
+#endif
+    EVT_GRID_CMD_CELL_LEFT_CLICK(ID_GRID_RANGES,RangeEditorDialog::OnGridRangeClick) 
+    EVT_GRID_CMD_CELL_LEFT_CLICK(ID_GRID_IONS,RangeEditorDialog::OnGridIonClick) 
+    EVT_GRID_CMD_EDITOR_SHOWN(ID_GRID_RANGES,RangeEditorDialog::OnGridRangesEditorShown)
+    EVT_GRID_CMD_EDITOR_SHOWN(ID_GRID_IONS,RangeEditorDialog::OnGridIonsEditorShown)
+    EVT_BUTTON(wxID_ADD, RangeEditorDialog::OnBtnRangeIonAdd)
+    EVT_BUTTON(wxID_REMOVE, RangeEditorDialog::OnBtnRangeIonRemove)
+    EVT_CHECKLISTBOX(ID_LIST_OVERLAY, RangeEditorDialog::OnListOverlayCheck)
+    EVT_BUTTON(wxID_OK, RangeEditorDialog::OnBtnOK)
+    EVT_BUTTON(wxID_CANCEL, RangeEditorDialog::OnBtnCancel)
+    EVT_SPLITTER_UNSPLIT(ID_SPLIT_LEFTRIGHT, RangeEditorDialog::OnSashVerticalUnsplit)
+    // end wxGlade
+END_EVENT_TABLE();
+
+void RangeEditorDialog::getModifiedRanges(map<const RangeFile *, const RangeFile *> &modRanges) const
+{
+	//modRanges.reserve(modifiedRanges.size());
+
+	for(RFMAP::const_iterator it = modifiedRanges.begin() ;
+			it!= modifiedRanges.end(); ++it)
+	{
+		const RangeFile *r = &(it->first->getRange());
+		modRanges[r]=&(it->second);
+	}
+}
+
+
+void RangeEditorDialog::onPlotUpdate()
+{
+#ifdef DEBUG
+	size_t lastEditedRegion,lastEditedPlot;
+	plotPanel->getLastEdited(lastEditedPlot,lastEditedRegion);
+
+	ASSERT(lastEditedRegion!= -1);
+	ASSERT(lastEditedPlot != -1);
+#endif
+
+	generateRangeEntries();
+	generateIonEntries();
+
+	setRangeReady();	
+}
+
+
+
+void RangeEditorDialog::setPlotWrapper(const PlotWrapper  &p)
+{
+	plotWrap = p;
+
+
+	plotWrap.setEnableHighlightOverlap();
+   
+
+	//Find all unique ranges
+	//--
+	vector<pair<size_t,vector<PlotRegion> > > regions;
+	plotWrap.getRegions(regions,false);
+
+
+	std::set<const RangeFileFilter *> ranges;
+	for(size_t ui=0;ui<regions.size();ui++)
+	{
+		//Region data is actually empty.
+		if(regions[ui].second.empty())
+		{
+			//ignore this plot
+			ignoreList.insert(regions[ui].first);
+			continue;
+		}
+		
+		const Filter *parentFilt;
+		parentFilt = regions[ui].second[0].getParentAsFilter();
+
+		if(parentFilt->getType() != FILTER_TYPE_RANGEFILE)
+		{
+			//ignore this plot
+			ignoreList.insert(regions[ui].first);
+			continue;
+		}
+		
+		//Remember that we need to (shortly) create a new rangefile for this
+		ranges.insert((const RangeFileFilter *)parentFilt);
+		//Create a mapping between the plot and its owned rangefile
+		plotToRangeFileMap[regions[ui].first]=(const RangeFileFilter*)parentFilt;
+	}
+	//--
+
+	//create a copy of the range file that are the to-be-modified ranges
+	for(set<const RangeFileFilter *>::const_iterator it=ranges.begin();
+		it != ranges.end(); ++it)
+	{
+		modifiedRanges[*it]=((*it)->getRange());
+		modifiedRanges[*it].setEnforceConsistent(false);
+	}
+
+	//Now, change the behaviour of region updating for the plot wrapper
+	// to update our new rangefile objects
+
+
+	plotWrap.switchOutRegionParent(modifiedRanges);
+
+	//Set the plot panel to use the appropriate plot wrapper
+	plotPanel->setPlotWrapper(&plotWrap,false);
+
+	//Generate the list entries
+	generateListEntries();
+	
+	setCurrentRange();
+	
+	//Find all the plots in the wrapper, and add them to the list
+	generateIonEntries();
+	generateRangeEntries();
+
+	//Hack to ensure we select something at startup
+	// only if there is nothing selected, and the plot list has items
+	if(currentRange && !plotPanel->getNumVisible() && 
+				listPlots->GetCount() > 0)
+	{
+		{
+			ASSERT(listPlots->GetSelection() !=wxNOT_FOUND);
+	
+			unsigned int plotID;
+			plotID=listToPlotIDs[listPlots->GetSelection()];
+			plotWrap.setVisible(plotID);
+
+	
+			plotPanel->Refresh();
+		}
+	}
+}
+
+
+void RangeEditorDialog::setCurrentRange(size_t forceSelected)
+{
+	//IF we have no plots,
+	// we cannot have any current range
+	if(!listPlots->GetCount())
+	{
+		currentRange=0;
+		return;
+	}
+
+	//Get the currently selected plot
+	unsigned int curPlotID;
+	if(forceSelected == (size_t) -1)
+	{
+		ASSERT(listPlots->GetCount());
+		
+
+		int selectedItem=listPlots->GetSelection();
+
+		if(selectedItem== wxNOT_FOUND )
+		{
+			currentRange=0;
+			return;
+		}
+		cerr << "Selected item not wxNOT_FOUND" << endl;
+
+		curPlotID=listToPlotIDs[selectedItem];
+	}
+	else
+	{
+		cerr << "Not force selected" << endl;
+		curPlotID=listToPlotIDs[forceSelected];
+	}
+	
+
+
+	//If we don't have a new range for this plot, alter
+	// the parent of any regions in the plot
+	if(plotNewRanges.find(curPlotID) == plotNewRanges.end())
+	{
+		ASSERT(plotToRangeFileMap.find(curPlotID) != plotToRangeFileMap.end());
+
+		currentRange=&(modifiedRanges[plotToRangeFileMap[curPlotID]]);
+	}
+	else
+	{
+		//Either create a new, or set the old Rangefile to assign to this plot
+		currentRange=&(plotNewRanges[curPlotID]);
+	}
+}
+
+void RangeEditorDialog::generatePlotRegions()
+{
+	RegionGroup r;
+
+	if(!currentRange)
+		return;
+
+	//Go through each entry in the current range, and create a
+	// region in the plot that  corresponds to it
+	for(size_t ui=0;ui<currentRange->getNumRanges();ui++)
+	{
+		PlotRegion p(PlotRegion::ACCESS_MODE_RANGEFILE,currentRange);
+		RGBf col;
+
+		//set region colour
+		col = currentRange->getColour(currentRange->getIonID((unsigned int)ui));
+		p.r = col.red;
+		p.g = col.green;
+		p.b = col.blue;
+
+		p.id = ui;
+
+		p.bounds.clear();
+		p.bounds.push_back(currentRange->getRange(ui));
+
+		r.regions.push_back(p);
+
+	}
+
+	ASSERT(listPlots->GetSelection() != -1);
+
+	//Send the current range data to the current plot
+	unsigned int plotID;
+	plotID = listToPlotIDs[listPlots->GetSelection()]; 
+
+	//reassign new region group
+	plotWrap.setRegionGroup(plotID,r);
+
+	//Update plot
+	plotPanel->Refresh();	
+}
+
+void RangeEditorDialog::generateListEntries() 
+{
+	programmaticEvent=true;
+	vector<unsigned int> plotIDs;
+	plotWrap.getPlotIDs(plotIDs);
+
+	listPlots->Freeze();
+
+	listPlots->Clear();
+	//Add the plots that the user can get
+	for(size_t ui=0;ui<plotIDs.size();ui++)
+	{
+		unsigned int plotID;
+		plotID = plotIDs[ui];
+
+		std::wstring title;
+		title=plotWrap.getTitle(plotID);
+
+		//Only use plots from spectra
+		if(plotWrap.getParentType(plotID) != FILTER_TYPE_SPECTRUMPLOT || ignoreList.find(plotID) != ignoreList.end())
+			continue;	
+
+		//Append the plot to the list in the user interface,
+		// with the plot Id embeded in the element
+		int idx;
+		idx=listPlots->Append(wxStr(title));
+		listToPlotIDs[idx]=plotIDs[ui];
+	}
+
+	//If there is only one spectrum, select it
+	if(listPlots->GetCount() >= 1 )
+		listPlots->SetSelection(0);
+
+	listPlots->Thaw();
+	programmaticEvent=false;
+}
+
+void RangeEditorDialog::generateOverlayList(const vector<OVERLAY_DATA> &overlays) 
+{
+
+	//Build the list of enabled overlays
+	listOverlay->Clear();
+
+
+	for(size_t ui=0;ui<overlays.size();ui++)
+	{
+		listOverlay->Insert(wxStr(overlays[ui].title),ui);
+		listOverlay->Check(ui,overlays[ui].enabled);
+	}
+
+}
+
+void RangeEditorDialog::generateIonEntries(size_t rowVisibleHint)
+{
+	programmaticEvent=true;
+	//Withhold drawing updates until we are done.
+	gridIons->Freeze();
+
+	int viewStartX,viewStartY;
+	gridIons->GetViewStart(&viewStartX,&viewStartY);
+
+	//Reset the ion grid
+	//--
+	if(gridIons->GetNumberCols())
+		gridIons->DeleteCols(0,gridIons->GetNumberCols());
+	if(gridIons->GetNumberRows())
+		gridIons->DeleteRows(0,gridIons->GetNumberRows());
+	
+	gridIons->AppendCols(4);
+	gridIons->SetColLabelValue(ION_COL_PLOT,wxTRANS("Plot"));
+	gridIons->SetColLabelValue(ION_COL_SHORTNAME,wxTRANS("Short Name"));
+	gridIons->SetColLabelValue(ION_COL_LONGNAME,wxTRANS("Long Name"));
+	gridIons->SetColLabelValue(ION_COL_COLOUR,wxTRANS("Colour"));
+	//--
+	
+	
+	gridIonIds.clear();
+	
+	
+	//Get the currently selected plot
+	int curPlot=listPlots->GetSelection();
+
+	//If no plot slected, abort update
+	if(curPlot == (unsigned int) wxNOT_FOUND || !currentRange)
+	{
+		gridIons->Thaw();
+		programmaticEvent=false;
+		return;
+	}
+	
+	
+	std::wstring title;
+	title=plotWrap.getTitle(curPlot);
+
+	//Colour to  use for incomplete ions/ranges
+	wxColour incomplColour;
+	//A light blue colour
+	incomplColour.Set(162,162,255);
+	
+	
+	size_t curIonRow=0;
+	
+	//Fill in the ion grid
+	gridIons->AppendRows(currentRange->getNumIons());
+	for(size_t uj=0;uj<currentRange->getNumIons();uj++)
+	{
+		//Set the ionID from the row
+		gridIonIds[uj]=curIonRow;
+
+		gridIons->SetCellValue(curIonRow,
+				ION_COL_PLOT,wxStr(title));
+
+		gridIons->SetCellValue(curIonRow,
+				ION_COL_SHORTNAME,wxStr(currentRange->getName(uj)));
+		gridIons->SetCellValue(curIonRow,
+				ION_COL_LONGNAME,wxStr(currentRange->getName(uj,false)));
+		
+		//set the colour
+		wxGridCellAttr *attr = gridIons->GetOrCreateCellAttr(curIonRow,ION_COL_COLOUR);
+		RGBf col=currentRange->getColour(uj);
+
+		unsigned char r,g,b,a;
+		r=col.red*255.0f;
+		g=col.green*255.0f;
+		b=col.blue*255.0f;
+		a=255;
+		attr->SetBackgroundColour(wxColour(r,g,b,a));
+		attr->DecRef();
+
+		curIonRow++;
+	}
+	
+	//Add the incomplete ions
+	incompleteIonOffset=currentRange->getNumIons();
+	gridIons->AppendRows(incompleteIons.size());
+	for(size_t ui=0;ui<incompleteIons.size();ui++)
+	{
+		gridIons->SetCellValue(curIonRow,
+				ION_COL_PLOT,wxStr(title));
+
+		gridIons->SetCellValue(curIonRow,
+				ION_COL_SHORTNAME,wxStr(incompleteIons[ui].getShortName()));
+		gridIons->SetCellValue(curIonRow,
+				ION_COL_LONGNAME,wxStr(incompleteIons[ui].getLongName()));
+		
+		//set the colour
+		wxGridCellAttr *attr = gridIons->GetOrCreateCellAttr(curIonRow,ION_COL_COLOUR);
+		RGBf col=incompleteIons[ui].getColour();
+
+		unsigned char r,g,b,a;
+		r=col.red*255.0f;
+		g=col.green*255.0f;
+		b=col.blue*255.0f;
+		a=255;
+		attr->SetBackgroundColour(wxColour(r,g,b,a));
+		attr->DecRef();
+
+
+		for(size_t uj=0;uj<RNG_COL_ENUM_END; uj++)
+		{
+			if(uj == ION_COL_COLOUR)
+				continue;
+			gridIons->SetCellBackgroundColour(curIonRow,uj,incomplColour);
+		}
+		curIonRow++;
+	}
+	gridIons->Scroll(viewStartX,viewStartY);
+
+	if(rowVisibleHint!=(size_t)-1)
+	{
+		ASSERT(rowVisibleHint < gridIons->GetNumberRows());
+		gridIons->MakeCellVisible(rowVisibleHint,0);
+	}
+
+	gridIons->Thaw();
+	programmaticEvent=false;
+}
+
+void RangeEditorDialog::generateRangeEntries(size_t rowVisibleHint)
+{
+	programmaticEvent=true;
+	gridRanges->Freeze();
+
+
+	int viewStartX,viewStartY;
+	gridRanges->GetViewStart(&viewStartX,&viewStartY);
+
+	vector<pair<size_t,vector<PlotRegion> > > regions;
+	plotWrap.getRegions(regions);
+
+	//OK, so we have each plot and the regions it contains
+	//lets filter that down to the regions we can actually see
+
+	
+	
+	//Reset the range grid
+	//---
+	if(gridRanges->GetNumberCols())
+		gridRanges->DeleteCols(0,gridRanges->GetNumberCols());
+	if(gridRanges->GetNumberRows())
+		gridRanges->DeleteRows(0,gridRanges->GetNumberRows());
+	
+	gridRanges->AppendCols(4);
+	gridRanges->SetColLabelValue(0,wxTRANS("Plot"));
+	gridRanges->SetColLabelValue(1,wxTRANS("Ion"));
+	gridRanges->SetColLabelValue(2,wxTRANS("Start"));
+	gridRanges->SetColLabelValue(3,wxTRANS("End"));
+	//---
+
+	gridRangeIds.clear();
+	
+	
+	//Get the currently selected plot
+	int curPlot=listPlots->GetSelection();
+
+	//If no plot slected, abort update
+	if(curPlot == (unsigned int) wxNOT_FOUND || !currentRange)
+	{
+		gridRanges->Thaw();
+		return;
+	}
+
+
+	//Colour to  use for incomplete ions/ranges
+	wxColour incomplColour;
+	//A light blue colour
+	incomplColour.Set(162,162,255);
+	std::wstring title;
+	title=plotWrap.getTitle(curPlot);
+	
+	//Fill in the range grid
+	size_t curRangeRow=0;
+	gridRanges->AppendRows(currentRange->getNumRanges());
+	for(size_t ui=0;ui<currentRange->getNumRanges();ui++)
+	{
+		gridRangeIds[ui]=curRangeRow;
+		pair<float,float> rangeBound;
+		rangeBound=currentRange->getRange(ui);
+
+		std::string ionName;
+		ionName=currentRange->getName(currentRange->getIonID((unsigned int)ui));
+
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_PLOT,wxStr(title));
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_PARENT_ION,wxStr(ionName));
+
+		std::string tmpStr;
+		stream_cast(tmpStr,rangeBound.first);
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_START,wxStr(tmpStr));
+		stream_cast(tmpStr,rangeBound.second);
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_END,wxStr(tmpStr));
+
+		curRangeRow++;
+	}
+	
+	//Add the pending rows
+	gridRanges->AppendRows(incompleteRanges.size());
+	incompleteRangeOffset=currentRange->getNumRanges();
+
+
+	for(size_t ui=0;ui<incompleteRanges.size();ui++)
+	{
+		gridRangeIds[ui]=curRangeRow;
+	
+		std::string ionName;
+		ionName=incompleteRanges[ui].getIonName();
+
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_PLOT,wxStr(title));
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_PARENT_ION,wxStr(ionName));
+
+		std::string tmpStr;
+		stream_cast(tmpStr,incompleteRanges[ui].getStart());
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_START,wxStr(tmpStr));
+		stream_cast(tmpStr,incompleteRanges[ui].getEnd());
+		gridRanges->SetCellValue(curRangeRow,RNG_COL_END,wxStr(tmpStr));
+
+		for(size_t uj=0;uj<RNG_COL_ENUM_END; uj++)
+			gridRanges->SetCellBackgroundColour(curRangeRow,uj,incomplColour);
+
+		curRangeRow++;
+	}
+	
+
+	gridRanges->Scroll(viewStartX,viewStartY);
+	
+	if(rowVisibleHint!=(size_t)-1)
+	{
+		ASSERT(rowVisibleHint < gridRanges->GetNumberRows());
+		gridRanges->MakeCellVisible(rowVisibleHint,0);
+	}
+
+	gridRanges->Thaw();
+	programmaticEvent=false;
+}
+
+void RangeEditorDialog::OnListPlots(wxCommandEvent &event)
+{
+	if(programmaticEvent)
+		return;
+
+
+	setCurrentRange(event.GetSelection());
+	
+	plotWrap.hideAll();
+
+	//Set the plot visibility for each plot
+	for(unsigned int ui=0;ui<listPlots->GetCount(); ui++)
+	{
+		unsigned int plotID;
+		plotID = listToPlotIDs[ui];
+
+		//Set the plot visibility to match selection
+		plotWrap.setVisible(plotID,listPlots->IsSelected(ui));
+	}
+
+	plotPanel->Refresh();
+}
+
+void RangeEditorDialog::setRangeReady()
+{
+	bool isReady=true;
+	for(RFMAP::const_iterator it=modifiedRanges.begin(); 
+				it!=modifiedRanges.end(); ++it)
+	{
+		if(!it->second.isSelfConsistent() )
+		{
+			isReady=false;
+			break;
+		}
+
+	}
+
+	
+	btnOK->Enable(isReady);
+}
+
+void RangeEditorDialog::OnGridRangesEditorShown(wxGridEvent &event)
+{
+    event.Skip();
+    wxLogDebug(wxT("Event handler (RangeEditorDialog::OnGridRangesEditorShown) not implemented yet")); //notify the user that he hasn't implemented the event handler yet
+}
+
+void RangeEditorDialog::OnGridIonsEditorShown(wxGridEvent &event)
+{
+	if(event.GetRow() < incompleteIonOffset)
+	{
+		//We are editing a regular ion, not an incomplete ion
+		
+		size_t ionId=gridIonIds[event.GetRow()];
+
+		ASSERT(ionId < currentRange->getNumIons());
+		switch(event.GetCol())
+		{
+			case ION_COL_PLOT:
+				//Can't edit this column
+				event.Veto();
+				break;
+			case ION_COL_COLOUR:
+			{
+				//Pop up a dialog asking for colour input
+				RGBf rgbf=currentRange->getColour(ionId);
+
+				wxColourData d;
+				d.SetColour(wxColour((unsigned char)(rgbf.red*255),
+							(unsigned char)(rgbf.green*255),
+							(unsigned char)(rgbf.blue*255),
+							(unsigned char)(255)));
+				wxColourDialog *colDg=new wxColourDialog(this,&d);
+
+				//Check to see if user actually put in a colour
+				if( colDg->ShowModal() != wxID_OK)
+				{
+					event.Veto();
+					delete colDg;
+					return;
+				}
+
+				//Update the colour data in the range
+				wxColour c;
+				c=colDg->GetColourData().GetColour();
+
+				rgbf.red=c.Red()/255.0f;
+				rgbf.green=c.Green()/255.0f;
+				rgbf.blue=c.Blue()/255.0f;
+
+				currentRange->setColour(ionId,rgbf);
+				
+				//Change the colour in the grid
+				wxGridCellAttr *attr = gridIons->GetOrCreateCellAttr(
+								event.GetRow(),ION_COL_COLOUR);
+				attr->SetBackgroundColour(c);
+				
+				delete colDg;
+
+				//We have to veto the edit event so that  the user
+				// doesn't get a text box to type into
+				event.Veto();
+		
+				
+				//We need to update the plot regions, as they
+				// will have changed colour
+				generatePlotRegions();
+				break;
+			}
+			case ION_COL_SHORTNAME:
+			case ION_COL_LONGNAME:
+			{
+				//Nothing to do until edit is complete
+				break;	
+			}
+			default:
+				ASSERT(false);
+		}
+	}
+	else
+	{
+		size_t delta=event.GetRow() - incompleteIonOffset;
+		switch(event.GetCol())
+		{
+			case ION_COL_LONGNAME:
+			case ION_COL_SHORTNAME:
+				event.Skip();
+				break;
+			case ION_COL_PLOT:
+				event.Veto();
+				break;
+			case ION_COL_COLOUR:
+			{
+				RGBf rgbf=incompleteIons[delta].getColour();
+
+				wxColourData d;
+				d.SetColour(wxColour((unsigned char)(rgbf.red*255),
+							(unsigned char)(rgbf.green*255),
+							(unsigned char)(rgbf.blue*255),
+							(unsigned char)(255)));
+				wxColourDialog *colDg=new wxColourDialog(this,&d);
+
+				if( colDg->ShowModal() != wxID_OK)
+				{
+					delete colDg;
+					return;
+				}
+
+				wxColour c;
+				//Change the colour
+				c=colDg->GetColourData().GetColour();
+
+				rgbf.red=c.Red()/255.0f;
+				rgbf.green=c.Green()/255.0f;
+				rgbf.blue=c.Blue()/255.0f;
+
+				incompleteIons[delta].setColour(rgbf);
+					
+				delete colDg;
+			
+				//Check to see if the incomplete ion is now done
+				// if so, commit it to the rangefile
+				if(incompleteIons[delta].isFinished())
+				{
+					incompleteIons[delta].commit();
+			
+					std::swap(incompleteIons[delta],incompleteIons.back());
+					incompleteIons.pop_back();
+
+					generateIonEntries();
+										
+				}
+				else
+				{
+					unsigned char r,g,b,a;
+					r=rgbf.red*255.0f;
+					g=rgbf.green*255.0f;
+					b=rgbf.blue*255.0f;
+					a=255;
+
+					gridIons->SetCellBackgroundColour(event.GetRow(),
+						ION_COL_COLOUR,wxColour(r,g,b,a));
+
+				}
+
+
+				event.Veto();
+				
+				break;
+			}
+			default:
+				ASSERT(false);
+		}
+		
+	}
+
+	setRangeReady();
+}
+
+void RangeEditorDialog::OnGridRangesCellChange(wxGridEvent &event)
+{
+
+	if(programmaticEvent)
+		return;
+
+	programmaticEvent=true;
+	
+
+	std::string newContent;
+	newContent=stlStr(gridRanges->GetCellValue(event.GetRow(),event.GetCol()));
+
+	
+	if(event.GetRow() >= incompleteRangeOffset)
+	{
+		//Process an incomplete range in the grid 
+		size_t delta=event.GetRow() - incompleteRangeOffset;
+		
+		RangeFile &r = *(incompleteRanges[delta].getRangePtr());
+
+		switch(event.GetCol())
+		{
+			case RNG_COL_PLOT:
+				break;
+			case RNG_COL_PARENT_ION:
+			{
+				//Check to see if we have the ion name already
+				unsigned int newID = r.getIonID(newContent);
+				if( newID== (unsigned int)-1)
+				{
+					event.Veto();
+					programmaticEvent=false;
+					return;
+				}
+
+				incompleteRanges[delta].setParentId(newID);
+				break;
+			}
+			case RNG_COL_START:
+			{
+				float tmp;
+				if(stream_cast(tmp,newContent))
+				{
+					event.Veto();
+					programmaticEvent=false;
+					return;
+				}
+				incompleteRanges[delta].setStart(tmp);
+				break;
+			}
+			case RNG_COL_END:
+			{
+				float tmp;
+				if(stream_cast(tmp,newContent))
+				{
+					event.Veto();
+					programmaticEvent=false;
+					return;
+				}
+				incompleteRanges[delta].setEnd(tmp);
+				break;
+			}
+			default:
+			{
+				ASSERT(false);
+			}
+		}
+		
+		//if the  range is complete, add it
+		if(incompleteRanges[delta].isFinished())
+		{
+			incompleteRanges[delta].commit();
+	
+			std::swap(incompleteRanges[delta],incompleteRanges.back());
+			incompleteRanges.pop_back();
+
+								
+		}
+
+		generateRangeEntries();
+
+		//Re-generate the plot regions, as they have been changed now
+		generatePlotRegions();
+
+
+		programmaticEvent=false;
+		return;
+	}
+
+	//We have a pre-existing range that is being modified
+
+	//Find out which range was latered
+	size_t rangeId;
+	rangeId=gridRangeIds[event.GetRow()];
+	
+	switch(event.GetCol())
+	{
+		case RNG_COL_PLOT:
+			break;
+		case RNG_COL_PARENT_ION:
+		{
+			unsigned int newID = currentRange->getIonID(newContent);
+			if( newID== (unsigned int)-1)
+			{
+				event.Veto();
+				programmaticEvent=false;
+				return;
+			}
+
+			currentRange->setIonID(rangeId,newID);
+			break;
+		}
+		case RNG_COL_START:
+		{
+			float f;
+			if(stream_cast(f,newContent))
+			{
+				event.Veto();
+				programmaticEvent=false;
+				return;
+			}
+			
+			//Disallow inversio of range start/end
+			if(f >=currentRange->getRange(rangeId).second)
+			{
+				event.Veto();
+				programmaticEvent=false;
+				return;
+			}
+			currentRange->setRangeStart(rangeId,f);
+
+			break;
+		}
+		case RNG_COL_END:
+		{
+			float f;
+			if(stream_cast(f,newContent))
+			{
+				event.Veto();
+				programmaticEvent=false;
+				return;
+			}
+			
+			//Disallow inversoin of range start/end
+			if(f <=currentRange->getRange(rangeId).first)
+			{
+				event.Veto();
+				programmaticEvent=false;
+				return;
+			}
+			currentRange->setRangeEnd(rangeId,f);
+			break;
+		}
+
+		default:
+			ASSERT(false);
+	}
+
+	//Re-generate the altered plot regions
+	generatePlotRegions();
+
+	programmaticEvent=false;
+	
+	setRangeReady();
+}
+
+void RangeEditorDialog::OnGridIonsCellChange(wxGridEvent &event)
+{
+	if(programmaticEvent)
+		return;
+
+	std::string newContent;
+	newContent=stlStr(gridIons->GetCellValue(event.GetRow(),event.GetCol()));
+	
+	if(event.GetRow()>= incompleteIonOffset)
+	{
+		size_t delta=event.GetRow() - incompleteIonOffset;
+		
+		PendingIon &p = incompleteIons[delta];
+		switch(event.GetCol())
+		{
+			case ION_COL_PLOT:
+				//Can't edit this column
+				event.Veto();
+				break;
+			case ION_COL_COLOUR:
+				//Already handled
+				break;
+			case ION_COL_SHORTNAME:
+			{
+				//Check to see if the name already exists, if it does, then veto the event
+				if(p.getRangePtr()->getIonID(newContent.c_str()) == (unsigned int) - 1)
+					p.setShortName(newContent);				
+				else
+					event.Veto();
+				break;	
+			}
+			case ION_COL_LONGNAME:
+			{
+				//Check to see if the name already exists, if it does, then veto the event
+				if(p.getRangePtr()->getIonID(newContent.c_str(),false) == (unsigned int) - 1)
+					p.setLongName(newContent);				
+				else
+					event.Veto();
+				break;	
+			}
+			default:
+				ASSERT(false);
+		}
+		
+		//if the  range is complete, add it
+		if(incompleteIons[delta].isFinished())
+		{
+			incompleteIons[delta].commit();
+
+			std::swap(incompleteIons[delta],incompleteIons.back());
+			incompleteIons.pop_back();
+
+			generateIonEntries();
+
+		}
+
+		return;
+	}
+
+	//Find out which ion was latered
+	size_t ionId;
+	ionId=gridIonIds[event.GetRow()];
+	
+
+	switch(event.GetCol())
+	{
+		case ION_COL_COLOUR:
+			//already handled on cell editor shown- do nothing
+			break;
+		case ION_COL_SHORTNAME:
+			currentRange->setIonShortName(ionId,newContent);
+			break;
+		case ION_COL_LONGNAME:
+			currentRange->setIonLongName(ionId,newContent);
+			break;
+		case ION_COL_PLOT:
+			//veto
+			event.Veto();
+			break;
+		default:
+			ASSERT(false);
+	}
+	
+	setRangeReady();
+}
+
+void RangeEditorDialog::OnGridRangeClick(wxGridEvent &cmd)
+{
+	lastFocused=GRID_FOCUS_RANGES;
+	cmd.Skip();
+}
+
+void RangeEditorDialog::OnGridIonClick(wxGridEvent &cmd)
+{
+	lastFocused=GRID_FOCUS_IONS;
+	cmd.Skip();
+}
+
+void RangeEditorDialog::OnBtnRangeIonAdd(wxCommandEvent &event)
+{
+	//If there are no grids then the user cannot focus them,
+	// so in this case, give the user the option of selecting what action to take
+	if(lastFocused == GRID_FOCUS_NONE || 
+		!gridRanges->GetNumberRows() || !gridIons->GetNumberRows())
+	{
+		wxArrayString wxStrs;
+		wxStrs.Add(wxCStr("Ion"));
+		wxStrs.Add(wxCStr("Range"));
+
+#if wxCHECK_VERSION(2, 9, 0)
+		wxSingleChoiceDialog *wxD = new wxSingleChoiceDialog(this, wxTRANS("Range or ion?"),
+				wxTRANS("Select type to add"),wxStrs,(void **)NULL,wxDEFAULT_DIALOG_STYLE|wxOK|wxCENTRE);
+#else
+		wxSingleChoiceDialog *wxD = new wxSingleChoiceDialog(this, wxTRANS("Range or ion?"),
+				wxTRANS("Select type to add"),wxStrs,NULL,wxDEFAULT_DIALOG_STYLE|wxOK|wxCENTRE);
+#endif
+
+		wxD->ShowModal();
+
+		if(wxD->GetSelection() == 0)
+			lastFocused=GRID_FOCUS_IONS;
+		else
+			lastFocused=GRID_FOCUS_RANGES;
+
+	}
+
+	//Update either the range or ion grid with a new pending item.
+	ASSERT(currentRange);
+	switch(lastFocused)
+	{
+		case GRID_FOCUS_RANGES:
+		{
+			incompleteRanges.push_back(PendingRange(currentRange));
+
+			size_t visibleRowHint=gridRanges->GetNumberRows();
+			generateRangeEntries(visibleRowHint);
+			break;
+		}
+		case GRID_FOCUS_IONS:
+		{
+			incompleteIons.push_back(PendingIon(currentRange));
+			
+			size_t visibleRowHint=gridIons->GetNumberRows();
+			generateIonEntries(visibleRowHint);
+			break;
+		}
+		default:
+			ASSERT(false);
+	}
+	
+
+	setRangeReady();
+}
+
+
+void RangeEditorDialog::OnBtnRangeIonRemove(wxCommandEvent &event)
+{
+	switch(lastFocused)
+	{
+		case GRID_FOCUS_RANGES:
+		{
+			size_t row=gridRanges->GetGridCursorRow();
+			//TODO: Better selection handling
+			// - grids are notoriously bad at selection in wx
+			if(!gridRanges->GetNumberRows() || row == wxNOT_FOUND)
+				break;
+			
+			if(row  < incompleteRangeOffset)
+			{
+				//Find the mapping between the range, then kill it
+				size_t rangeId = gridRangeIds[row];
+				//Kill the range
+				currentRange->eraseRange(rangeId);
+			}
+			else
+			{
+				size_t delta=row - incompleteRangeOffset;
+				//Remove the pending range
+				std::swap(incompleteRanges[delta],
+						incompleteRanges.back());
+				incompleteRanges.pop_back();
+			}
+			//relayout the grid
+			generateRangeEntries();	
+	
+			//Update plot
+			generatePlotRegions();
+			break;
+		}
+		case GRID_FOCUS_IONS:
+		{
+			size_t row=gridIons->GetGridCursorRow();
+			//TODO: Better selection handling
+			// - grids are notoriously bad at selection in wx
+			if(!gridIons->GetNumberRows() || row == wxNOT_FOUND)
+				break;
+				
+			if(row  < incompleteIonOffset)
+			{
+				//Find the mapping between the range, then kill it
+				size_t ionId = gridIonIds[row];
+
+				//Kill the ion, and any of its ranges
+				currentRange->eraseIon(ionId);
+			}
+			else
+			{
+				size_t delta=row - incompleteIonOffset;
+				//Remove the pending range
+				std::swap(incompleteIons[delta],
+						incompleteIons.back());
+				incompleteIons.pop_back();
+			}
+			
+			//relayout the grids, then update plot
+			generateIonEntries();	
+			generateRangeEntries();
+			generatePlotRegions();
+
+			break;
+		}
+		case GRID_FOCUS_NONE:
+		{
+			break;
+		}
+		default:
+			ASSERT(false);
+	}
+
+	setRangeReady();
+}
+
+
+void RangeEditorDialog::OnCheckShowOverlay(wxCommandEvent &event)
+{
+	plotWrap.overlays.setEnabled(event.IsChecked());
+	plotPanel->Refresh();
+}
+
+
+
+void RangeEditorDialog::OnBtnOK(wxCommandEvent &event)
+{
+	EndModal(wxID_OK);
+}
+
+
+void RangeEditorDialog::OnBtnCancel(wxCommandEvent &event)
+{
+	EndModal(wxID_CANCEL);
+}
+
+void RangeEditorDialog::OnListOverlayCheck(wxCommandEvent &event)
+{
+	long index=event.GetInt();
+
+	bool isChecked;
+	isChecked=listOverlay->IsChecked(index);
+
+	plotWrap.overlays.setEnabled(index,isChecked);
+	plotPanel->Refresh();
+}
+
+void RangeEditorDialog::OnListOverlayKeyDown(wxListEvent &event)
+{
+	//Check for delete key
+	if(event.GetKeyCode() != WXK_DELETE)
+		return;
+
+	long index=event.GetIndex();
+	plotWrap.overlays.erase(index);
+
+	generateOverlayList(plotWrap.overlays.getOverlays());
+	plotPanel->Refresh();
+}
+
+void RangeEditorDialog::OnSashVerticalUnsplit(wxSplitterEvent &event)
+{
+	event.Veto();
+}
+
+void RangeEditorDialog::OnTextOverlay(wxCommandEvent &event)
+{
+
+	std::string compoundString;
+	compoundString=stlStr(textOverlayCmpnt->GetValue());
+	vector<pair<string,size_t> > ionFragments;
+	if(RangeFile::decomposeIonNames(compoundString,ionFragments))
+	{
+	    textOverlayCmpnt->SetDefaultStyle(wxTextAttr(*wxBLUE));
+	}
+	else
+	{
+	    textOverlayCmpnt->SetDefaultStyle(wxTextAttr(wxNullColour));
+	}
+}
+
+void RangeEditorDialog::OnTextOverlaySetFocus(wxFocusEvent &event)
+{
+	if(!haveSetTextFocus)
+	{
+		haveSetTextFocus=true;
+		textOverlayCmpnt->SetValue(wxT(""));
+	}
+	else 
+		event.Skip();
+}
+
+void RangeEditorDialog::OnTextOverlayEnter(wxCommandEvent &event)
+{
+	//Obtain the user input for the text control
+	std::string compoundString;
+	compoundString = stlStr(textOverlayCmpnt->GetValue());
+
+	//break the users' input into 
+	vector<pair<string,size_t> > ionFragments;
+	if(!RangeFile::decomposeIonNames(compoundString,ionFragments))
+		return;
+
+	//Check to see if each component has a matching symbol for all elements
+	//----
+	bool symbolsFound;
+	vector<size_t> indicies;
+	vector<string> symbols;
+
+	//Get the indices for each gragment
+	symbols.resize(ionFragments.size());
+	for(size_t ui=0;ui<symbols.size();ui++)
+		symbols[ui]=ionFragments[ui].first;
+
+	abundanceData.getSymbolIndices(symbols,indicies);
+
+	//Ensure there are no bad indices
+	symbolsFound=(std::find(indicies.begin(),indicies.end(),(size_t)-1) == indicies.end());
+
+	if(!symbolsFound)
+	{
+		textOverlayCmpnt->SetBackgroundColour(wxColour(*wxCYAN));
+		return;
+	}
+	textOverlayCmpnt->SetBackgroundColour(wxNullColour);
+	//----
+
+	//Get the intensity distribution
+	//----
+	vector<size_t> fragmentCount;
+	size_t totalFragments=0;
+	fragmentCount.resize(ionFragments.size());
+	for(size_t ui=0;ui<ionFragments.size();ui++)
+	{
+		fragmentCount[ui]=(float)ionFragments[ui].second;
+		totalFragments+=fragmentCount[ui];
+	}
+
+	//Limit the number of fragments allowable, as the total number
+	// of combinations is (species)^fragmentCount. Eg C2 has two
+	// species, 12^C and 13^C, and with 10 items, you get 2^10 combinations
+	size_t MAX_FRAGMENT_COUNT=10;
+	if(totalFragments > MAX_FRAGMENT_COUNT)
+	{
+		textOverlayCmpnt->SetBackgroundColour(wxColour(*wxCYAN));
+		return;
+	}
+
+	//Number of times to "fold" the intensity distribution
+	const size_t MAX_FOLD_VALUE=3;
+
+	
+	OVERLAY_DATA overlay;
+	overlay.title=compoundString;
+	overlay.enabled=true;
+	for(size_t ui=0;ui<MAX_FOLD_VALUE;ui++)
+	{
+		vector<pair<float,float> > massDist;
+		abundanceData.generateIsotopeDist(indicies,fragmentCount,massDist,ui+1);
+
+		for(size_t uj=0;uj<massDist.size();uj++)
+			overlay.coordData.push_back(massDist[uj]);
+	}
+	//-----
+
+
+	//Add to the list of components that can be disabled/enabled
+	plotWrap.overlays.add(overlay);
+
+	generateOverlayList(plotWrap.overlays.getOverlays());
+
+	plotPanel->Refresh();
+}
+
+// wxGlade: add RangeEditorDialog event handlers
+
+
+void RangeEditorDialog::set_properties()
+{
+    // begin wxGlade: RangeEditorDialog::set_properties
+    SetTitle(wxTRANS("Range Editor"));
+    gridRanges->CreateGrid(0, 3);
+    gridIons->CreateGrid(0, 3);
+
+    checkShowOverlay->SetToolTip(wxTRANS("Enable or disable all overlays"));
+    listOverlay->SetToolTip(wxTRANS("Entered overlays, use delete to remove"));
+    listPlots->SetToolTip(wxTRANS("Available plots for ranging"));
+    textOverlayCmpnt->SetToolTip(wxTRANS("Enter species to display as overlay, e.g. SiO2"));
+    gridRanges->SetToolTip(wxTRANS("Editable ranges"));
+    gridIons->SetToolTip(wxTRANS("Editable ions"));
+    // end wxGlade
+}
+
+
+void RangeEditorDialog::do_layout()
+{
+    // begin wxGlade: RangeEditorDialog::do_layout
+    wxBoxSizer* topSizer = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizerRight = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* sizerBottom = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizerNote = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizerOverlayPane = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* sizerOverlay = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* sizerOverlayContainer = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* sizerOverlayLeft = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* sizerRanges = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* sizerRangeBottom = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizerPlotList = new wxBoxSizer(wxVERTICAL);
+    sizerPlotList->Add(listPlots, 1, wxEXPAND, 0);
+    noteLeftPlots->SetSizer(sizerPlotList);
+    sizerRanges->Add(gridIons, 1, wxALL|wxEXPAND, 4);
+    sizerRanges->Add(gridRanges, 1, wxALL|wxEXPAND, 4);
+    sizerRangeBottom->Add(20, 20, 1, 0, 0);
+    sizerRangeBottom->Add(btnRangeIonAdd, 0, wxALL, 4);
+    sizerRangeBottom->Add(btnRangeIonRemove, 0, wxALL, 4);
+    sizerRanges->Add(sizerRangeBottom, 0, wxALL|wxEXPAND, 4);
+    noteLeftRanges->SetSizer(sizerRanges);
+    sizerOverlay->Add(checkShowOverlay, 0, wxALL, 5);
+    sizerOverlayLeft->Add(textOverlayCmpnt, 0, wxEXPAND, 0);
+    sizerOverlayContainer->Add(sizerOverlayLeft, 0, wxALL|wxEXPAND, 2);
+    sizerOverlayContainer->Add(listOverlay, 1, wxEXPAND, 0);
+    sizerOverlay->Add(sizerOverlayContainer, 1, wxEXPAND, 0);
+    sizerOverlayPane->Add(sizerOverlay, 1, wxEXPAND, 0);
+    noteLeftOverlay->SetSizer(sizerOverlayPane);
+    notebookLeft->AddPage(noteLeftPlots, wxTRANS("Plots"));
+    notebookLeft->AddPage(noteLeftRanges, wxTRANS("Ranges"));
+    notebookLeft->AddPage(noteLeftOverlay, wxTRANS("Overlay"));
+    sizerNote->Add(notebookLeft, 1, wxEXPAND, 0);
+    panelSplitLeft->SetSizer(sizerNote);
+    sizerRight->Add(plotPanel, 1, wxEXPAND, 0);
+    sizerBottom->Add(20, 20, 1, 0, 0);
+    sizerBottom->Add(btnOK, 0, wxALL, 4);
+    sizerBottom->Add(btnCancel, 0, wxALL, 4);
+    sizerRight->Add(sizerBottom, 0, wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 4);
+    panelSplitRight->SetSizer(sizerRight);
+    splitVertical->SplitVertically(panelSplitLeft, panelSplitRight);
+    topSizer->Add(splitVertical, 1, wxEXPAND, 0);
+    SetSizer(topSizer);
+    topSizer->Fit(this);
+    Layout();
+    // end wxGlade
+}
+
diff --git a/src/gui/dialogs/rangeEditDialog.h b/src/gui/dialogs/rangeEditDialog.h
new file mode 100644
index 0000000..c7a09fc
--- /dev/null
+++ b/src/gui/dialogs/rangeEditDialog.h
@@ -0,0 +1,230 @@
+// -*- C++ -*- generated by wxGlade 0.6.5 on Fri May  3 00:54:04 2013
+#ifndef RANGEEDITDIALOG_H
+#define RANGEEDITDIALOG_H
+
+#include <wx/wx.h>
+#include <wx/image.h>
+
+// begin wxGlade: ::dependencies
+#include <wx/splitter.h>
+#include <wx/listctrl.h>
+#include <wx/notebook.h>
+#include <wx/grid.h>
+// end wxGlade
+
+
+#include <map>
+#include <set>
+#include <string>
+
+//#include "wx/checkedlistctrl.h"
+
+#include "backend/plot.h"
+#include "../mathglPane.h"
+
+#include "backend/APT/abundanceParser.h"
+
+class PendingRange
+{
+	private:
+		//are the start/second entries valid?
+		bool validStart,validEnd, validParent;
+		//Start and end of the range
+		float start,end;
+		//Parent ion id
+		size_t parentId;
+
+		//Range file that "owns" this pending range
+		RangeFile *rngPtr;
+public:
+		PendingRange(RangeFile *parentRange);
+		//Obtain the range file that owns this pending range
+		RangeFile *getRangePtr() const { return rngPtr;}
+
+		//Set the end of the range
+		void setEnd(float f) { end=f; validEnd=true;}
+		
+		//Set the Start of the range
+		void setStart(float f) { start=f;validStart=true;}
+		//Set the parent ion in the owning rangefile
+		void setParentId(size_t v) {ASSERT(v < rngPtr->getNumIons()); parentId=v; validParent=true;}
+
+		//Returns true if all the data set for the pending range is valid
+		bool isFinished() const;
+
+		//Applies the changes to the parent rangefile
+		void commit();
+
+		//obtain range start
+		float getStart() const;
+		//obtain range  end
+		float getEnd() const;
+		//obtain range parent ion name 
+		std::string getIonName() const;
+};
+
+class PendingIon
+{
+	private:
+		//Range file that will own the ion when added
+		RangeFile *rngPtr;
+			
+		//Range colour
+		RGBf colour;
+		//Short and long names for this ion
+		std::string shortName, longName;
+		//True if these values have been set and are valid when commited to the rangefile
+		bool validColour, validShortName,validLongName;
+	public:
+		PendingIon(RangeFile *r);
+		
+		RangeFile *getRangePtr() const { return rngPtr;}
+		//Set the colour of the pending ion, and set validity
+		void setColour(const RGBf &r);
+		//Obtain a colour for the ion (the set if valid, or a default)
+		RGBf getColour() const;
+		//obtain the short name for the ion, or a default (may be empty)
+		std::string getShortName() const;
+		//Set the short name for the ion, and set validity
+		void setShortName(const std::string &newName);
+
+		//obtain the long name for the ion, or a default (may be empty)
+		std::string getLongName() const;
+		//Set the long name for the ion, and set validity
+		void setLongName(const std::string &newName);
+
+		//True if the ion is fully valid
+		bool isFinished() const;
+		
+		//Commit the pending ion to the rangefile
+		void commit() const;
+};
+
+
+class RangeEditorDialog: public wxDialog {
+public:
+    // begin wxGlade: RangeEditorDialog::ids
+    // end wxGlade
+
+    RangeEditorDialog(wxWindow* parent, int id, const wxString& title, const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE);
+
+private:
+    bool haveSetTextFocus;
+    // begin wxGlade: RangeEditorDialog::methods
+    void set_properties();
+    void do_layout();
+    // end wxGlade
+		
+    std::map<int,size_t> listToPlotIDs;
+
+    //Store the mapping between grid offsets and the 
+    // ionID (2nd in pair) for the current range
+    std::map<size_t,size_t > gridIonIds,gridRangeIds;
+
+    //Currently selected range
+    RangeFile *currentRange;
+
+    //Map original range file filiter to new modified rangefile
+    // modified rangefiles data is stored here
+    std::map<const RangeFileFilter *, RangeFile> modifiedRanges;
+
+    //Mapping of plot ID -> rangefile filter, for ranges that have their own parent
+    std::map<size_t ,const RangeFileFilter*> plotToRangeFileMap;
+
+    //Plots that exist, but do not have a range mapping
+    std::set<size_t> ignoreList;
+ 
+    //Mapping of plot ID -> rangefile 
+    std::map<size_t, RangeFile> plotNewRanges;
+
+    //Row value for range/ion entries that the user has not fully completed
+    std::vector<PendingRange> incompleteRanges;
+    std::vector<PendingIon> incompleteIons;
+   
+    //position in incomplete ion offset where the normal ranges/ions finish 
+    // and the Pending(Range/Ion)s start.
+    size_t incompleteRangeOffset,incompleteIonOffset;
+    //Plot data that contains information about plots to show, and
+    // through that the original range information
+    PlotWrapper plotWrap;
+
+    size_t lastFocused;
+
+    //Blocker variable to allow functions to bail out
+    // during programatically generated events
+    bool programmaticEvent;
+  
+
+    AbundanceData abundanceData;
+
+    void setCurrentRange(size_t forceSelected=-1);
+    
+    void generateListEntries();
+    //Generate (and set) the current plot region data from stored rangefile info
+    void generatePlotRegions();
+
+    //Generate the list of overlays
+    void generateOverlayList(const vector<OVERLAY_DATA> &overlays) ;
+
+    //Rebuild the range entry grid
+    void generateRangeEntries(size_t rowVisibleHint=(size_t)-1);
+    //Rebuild the ion entry grid
+    void generateIonEntries(size_t rowVisibleHint=(size_t)-1);
+protected:
+    // begin wxGlade: RangeEditorDialog::attributes
+    wxListBox* listPlots;
+    wxPanel* noteLeftPlots;
+    wxGrid* gridRanges;
+    wxGrid* gridIons;
+    wxButton* btnRangeIonAdd;
+    wxButton* btnRangeIonRemove;
+    wxPanel* noteLeftRanges;
+    wxCheckBox* checkShowOverlay;
+    wxTextCtrl* textOverlayCmpnt;
+    wxCheckListBox* listOverlay;
+    wxPanel* noteLeftOverlay;
+    wxNotebook* notebookLeft;
+    wxPanel* panelSplitLeft;
+    MathGLPane* plotPanel;
+    wxButton* btnOK;
+    wxButton* btnCancel;
+    wxPanel* panelSplitRight;
+    wxSplitterWindow* splitVertical;
+
+
+    void setRangeReady();
+    // end wxGlade
+
+    DECLARE_EVENT_TABLE();
+
+public:
+    virtual void OnListPlots(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnGridRangesCellChange(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnGridRangeClick(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnGridIonClick(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnGridRangesEditorShown(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnGridIonsEditorShown(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnGridIonsCellChange(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnBtnRangeIonAdd(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnBtnRangeIonRemove(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnCheckShowOverlay(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnBtnOK(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnBtnCancel(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnSashVerticalUnsplit(wxSplitterEvent &event); // wxGlade: <event_handler>
+    virtual void OnListOverlayCheck(wxCommandEvent &event);
+    virtual void OnListOverlayKeyDown(wxListEvent &event);
+    virtual void OnTextOverlay(wxCommandEvent &event);
+    virtual void OnTextOverlayEnter(wxCommandEvent &event);
+    virtual void OnTextOverlaySetFocus(wxFocusEvent &event);
+    void onPlotUpdate();
+    void setPlotWrapper(const PlotWrapper &p);
+  
+    //Obtain a pointer to the modified range. The pointer is only valid for the lifetime of the dialog
+    void getModifiedRanges(std::map<const RangeFile *, const RangeFile *> &modRanges) const;
+
+    virtual ~RangeEditorDialog();
+
+}; // wxGlade: end class
+
+
+#endif // RANGEEDITDIALOG_H
diff --git a/src/gui/dialogs/resolutionDialog.cpp b/src/gui/dialogs/resolutionDialog.cpp
index 27f854e..6b8631b 100644
--- a/src/gui/dialogs/resolutionDialog.cpp
+++ b/src/gui/dialogs/resolutionDialog.cpp
@@ -19,7 +19,7 @@
 
 #include "resolutionDialog.h"
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 #include "common/translation.h"
 
 #include <wx/dcbuffer.h>
@@ -34,7 +34,6 @@ enum
   ID_RESET=wxID_ANY+1,
   ID_TEXT_WIDTH,
   ID_TEXT_HEIGHT,
-  ID_LOCK_ASPECT
 };
 
 const float MOUSEWHEEL_RATE_MULTIPLIER=1.0f;
@@ -47,9 +46,6 @@ ResolutionDialog::ResolutionDialog(wxWindow* parent, int id, const wxString& tit
     textWidth = new wxTextCtrl(this, ID_TEXT_WIDTH, wxT(""));
     labelHeight = new wxStaticText(this, wxID_ANY, wxTRANS("Height :"));
     textHeight = new wxTextCtrl(this, ID_TEXT_HEIGHT, wxT(""));
-    checkLockAspect = new wxCheckBox(this, ID_LOCK_ASPECT, wxTRANS("Lock Aspect"));
-    static_line_1 = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL);
-    panelImage = new wxPanel(this, wxID_ANY);
     static_line_2 = new wxStaticLine(this, wxID_ANY);
     btnReset = new wxButton(this, ID_RESET, wxTRANS("Reset"));
     btnOK = new wxButton(this, wxID_OK, wxEmptyString);
@@ -58,7 +54,6 @@ ResolutionDialog::ResolutionDialog(wxWindow* parent, int id, const wxString& tit
 #if wxCHECK_VERSION(2, 9, 0)
     textWidth->Bind(wxEVT_MOUSEWHEEL, &ResolutionDialog::OnMouseWheelWidth, this);
     textHeight->Bind(wxEVT_MOUSEWHEEL, &ResolutionDialog::OnMouseWheelHeight, this);
-    SetBackgroundStyle(wxBG_STYLE_PAINT);
 #else
     textWidth->Connect(wxID_ANY, wxEVT_MOUSEWHEEL,
 		    wxMouseEventHandler(ResolutionDialog::OnMouseWheelWidth),NULL,this);
@@ -84,11 +79,9 @@ BEGIN_EVENT_TABLE(ResolutionDialog, wxDialog)
     // begin wxGlade: ResolutionDialog::event_table
     EVT_TEXT(ID_TEXT_WIDTH, ResolutionDialog::OnTextWidth)
     EVT_TEXT(ID_TEXT_HEIGHT, ResolutionDialog::OnTextHeight)
-    EVT_CHECKBOX(ID_LOCK_ASPECT, ResolutionDialog::OnCheckLockAspect)
     EVT_BUTTON(ID_RESET, ResolutionDialog::OnBtnReset)
     EVT_BUTTON(wxID_OK, ResolutionDialog::OnBtnOK)
     EVT_BUTTON(wxID_CANCEL, ResolutionDialog::OnBtnCancel)
-    EVT_PAINT(ResolutionDialog::OnPaint)
     EVT_KEY_DOWN(ResolutionDialog::OnKeypress)
     // end wxGlade
 END_EVENT_TABLE();
@@ -120,10 +113,8 @@ void ResolutionDialog::setRes(unsigned int w, unsigned int h, bool asReset)
 		resOrigWidth=w;
 		resOrigHeight=h;
 
-		if(resOrigWidth)
-			aspect=(float)resOrigHeight/(float)resOrigWidth;
-		else
-			aspect=0;
+		ASSERT(resOrigWidth);
+		aspect=(float)resOrigHeight/(float)resOrigWidth;
 	}
 
 	programmaticEvent--;
@@ -163,12 +154,11 @@ void ResolutionDialog::OnTextWidth(wxCommandEvent &event)
 	resWidth=width;
 
 	//if we are locking the aspect ratio, set the other text box to have the same ratio
-	if(checkLockAspect->IsChecked() && aspect > std::numeric_limits<float>::epsilon())
-	{
-		resHeight=(unsigned int)(width*aspect);
-		stream_cast(textStr,resHeight);
-		textHeight->SetValue(wxStr(textStr));
-	}
+	ASSERT(aspect > std::numeric_limits<float>::epsilon());
+
+	resHeight=(unsigned int)(width*aspect);
+	stream_cast(textStr,resHeight);
+	textHeight->SetValue(wxStr(textStr));
 
 
 	updateImage();
@@ -212,12 +202,11 @@ void ResolutionDialog::OnTextHeight(wxCommandEvent &event)
 	resHeight=height;
 	
 	//if we are locking the aspect ratio, set the other text box to preserve the same ratio
-	if(checkLockAspect->IsChecked() && aspect > std::numeric_limits<float>::epsilon())
-	{
-		resWidth=(unsigned int)(height/aspect);
-		stream_cast(textStr,resWidth);
-		textWidth->SetValue(wxStr(textStr));
-	}
+	ASSERT(aspect > std::numeric_limits<float>::epsilon());
+
+	resWidth=(unsigned int)(height/aspect);
+	stream_cast(textStr,resWidth);
+	textWidth->SetValue(wxStr(textStr));
 
 	updateImage();
 
@@ -225,25 +214,10 @@ void ResolutionDialog::OnTextHeight(wxCommandEvent &event)
 }
 
 
-void ResolutionDialog::OnCheckLockAspect(wxCommandEvent &event)
-{
-	//Recompute the desired aspect
-	if(resWidth)
-		aspect=(float)resHeight/(float)resWidth;
-	else
-		aspect=0;
-}
-
 
 void ResolutionDialog::OnBtnReset(wxCommandEvent &event)
 {
 	setRes(resOrigWidth,resOrigHeight);
-	
-	//Recompute the desired aspect as per the original
-	if(resOrigWidth)
-		aspect=(float)resOrigHeight/(float)resOrigWidth;
-	else
-		aspect=0;
 }
 
 
@@ -289,13 +263,12 @@ void ResolutionDialog::OnMouseWheelWidth(wxMouseEvent &event)
 	setRes((unsigned int)(resWidth+moveRate),resHeight);
 
 	//if we are locking the aspect ratio, set the other text box to preserve the same ratio
-	if(checkLockAspect->IsChecked() && aspect > std::numeric_limits<float>::epsilon())
-	{
-		std::string textStr;
-		resHeight=(unsigned int)(resWidth*aspect);
-		stream_cast(textStr,resHeight);
-		textHeight->SetValue(wxStr(textStr));
-	}
+	ASSERT(aspect > std::numeric_limits<float>::epsilon());
+	
+	std::string textStr;
+	resHeight=(unsigned int)(resWidth*aspect);
+	stream_cast(textStr,resHeight);
+	textHeight->SetValue(wxStr(textStr));
 	
 	updateImage();
 	programmaticEvent--;
@@ -335,102 +308,17 @@ void ResolutionDialog::OnMouseWheelHeight(wxMouseEvent &event)
 	setRes(resWidth,(unsigned int)(resHeight+moveRate));
 
 	//if we are locking the aspect ratio, set the other text box to preserve the same ratio
-	if(checkLockAspect->IsChecked() && aspect > std::numeric_limits<float>::epsilon())
-	{
-		std::string textStr;
-		resWidth=(unsigned int)(resHeight/aspect);
-		stream_cast(textStr,resWidth);
-		textWidth->SetValue(wxStr(textStr));
-	}
+	ASSERT(aspect > std::numeric_limits<float>::epsilon());
+
+	std::string textStr;
+	resWidth=(unsigned int)(resHeight/aspect);
+	stream_cast(textStr,resWidth);
+	textWidth->SetValue(wxStr(textStr));
 
 	updateImage();
 	programmaticEvent--;
 }
 
-void ResolutionDialog::OnPaint(wxPaintEvent &event)
-{
-#ifdef __APPLE__
-	wxDC *dialogDC = new wxClientDC(this);
-#else
-	wxDC *dialogDC = new wxAutoBufferedPaintDC(this);
-#endif
-
-	int widthLabelY,heightLabelY,checkBoxY,connectorX;
-	int tmpY,tmpX,tmp;
-	
-	labelWidth->GetPosition(&connectorX,&tmpY);
-	labelWidth->GetSize(&tmpX,&tmp);
-	widthLabelY=tmpY + tmp/2;
-	
-	labelHeight->GetPosition(&tmpX,&tmpY);
-	labelHeight->GetSize(&tmpX,&tmp);
-	heightLabelY=tmpY + tmp/2;
-	
-	checkLockAspect->GetPosition(&tmpX,&tmpY);
-	checkLockAspect->GetSize(&tmpX,&tmp);
-	checkBoxY=tmpY + tmp/2;
-
-	//Draw the connecting lines in an "E" shape
-	const int LINE_STANDOFF=8;
-
-	dialogDC->DrawLine(connectorX-LINE_STANDOFF/2,widthLabelY,
-			connectorX-LINE_STANDOFF,widthLabelY);
-	dialogDC->DrawLine(connectorX-LINE_STANDOFF/2,heightLabelY,
-			connectorX-LINE_STANDOFF,heightLabelY);
-	dialogDC->DrawLine(connectorX-LINE_STANDOFF/2,checkBoxY,
-			connectorX-LINE_STANDOFF,checkBoxY);
-
-	dialogDC->DrawLine(connectorX-LINE_STANDOFF,checkBoxY,
-			connectorX-LINE_STANDOFF,widthLabelY);
-
-
-	delete dialogDC;
-
-#ifdef __APPLE__
-	wxDC *paintDC = new wxClientDC(panelImage);
-#else
-	wxDC *paintDC = new wxAutoBufferedPaintDC(panelImage);
-#endif
-
-	drawImageRectangle(paintDC);
-	
-	delete paintDC;
-}
-
-void ResolutionDialog::drawImageRectangle(wxDC *paintDC)
-{
-	paintDC->Clear();
-	int width,height;
-	width=resWidth;
-	height=resHeight;
-	
-
-	if(!(width && height))
-		return;
-
-
-	int panelHeight,panelWidth;
-
-	panelImage->GetClientSize(&panelWidth,&panelHeight);
-
-
-	float scaleFactor;
-	//Rescale the dimensions to fit 
-	// into image panel
-	scaleFactor=std::min((float)panelHeight/(float)height,
-			(float)panelWidth/(float)width);
-
-	width=(unsigned int)(width*scaleFactor);
-	height=(unsigned int)(height*scaleFactor);
-
-	int startX,startY;
-
-	startX = (int)((float)(panelWidth - width)*0.5f);
-	startY = (int)((float)(panelHeight - height)*0.5f);
-
-	paintDC->DrawRectangle(startX,startY,width,height);
-
-}
 
 void ResolutionDialog::OnKeypress(wxKeyEvent &evt)
 {
@@ -481,12 +369,9 @@ void ResolutionDialog::do_layout()
     heightTextSizer->Add(labelHeight, 0, wxALIGN_CENTER_VERTICAL, 0);
     heightTextSizer->Add(textHeight, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5);
     leftSizer->Add(heightTextSizer, 1, wxEXPAND, 0);
-    leftSizer->Add(checkLockAspect, 0, wxALIGN_CENTER_VERTICAL, 3);
     leftSizer->Add(20, 20, 2, 0, 0);
     upperSizer->Add(leftSizer, 0, wxLEFT|wxEXPAND, 8);
     upperSizer->Add(10, 10, 0, 0, 0);
-    upperSizer->Add(static_line_1, 0, wxEXPAND, 0);
-    upperSizer->Add(panelImage, 5, wxALL|wxEXPAND, 5);
     mainSizer->Add(upperSizer, 1, wxEXPAND, 0);
     mainSizer->Add(static_line_2, 0, wxEXPAND, 0);
     buttonSizer->Add(btnReset, 0, wxALL, 5);
diff --git a/src/gui/dialogs/resolutionDialog.h b/src/gui/dialogs/resolutionDialog.h
index 5a04209..2a6c8f4 100644
--- a/src/gui/dialogs/resolutionDialog.h
+++ b/src/gui/dialogs/resolutionDialog.h
@@ -45,7 +45,7 @@ private:
     // Non-zero if event is being generated programatically
     int programmaticEvent;  
 
-    //!aspect ratio for when locking aspect. Zero if undefined
+    //!aspect ratio that is to be used for locking user input
     float aspect;
 
     // begin wxGlade: ResolutionDialog::methods
@@ -65,9 +65,6 @@ protected:
     wxTextCtrl* textWidth;
     wxStaticText* labelHeight;
     wxTextCtrl* textHeight;
-    wxCheckBox* checkLockAspect;
-    wxStaticLine* static_line_1;
-    wxPanel* panelImage;
     wxStaticLine* static_line_2;
     wxButton* btnReset;
     wxButton* btnOK;
@@ -80,13 +77,11 @@ protected:
 public:
     virtual void OnTextWidth(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnTextHeight(wxCommandEvent &event); // wxGlade: <event_handler>
-    virtual void OnCheckLockAspect(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnBtnReset(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnBtnOK(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnBtnCancel(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnMouseWheelWidth(wxMouseEvent &event);
     virtual void OnMouseWheelHeight(wxMouseEvent &event);
-    virtual void OnPaint(wxPaintEvent &event);
 
     virtual void OnKeypress(wxKeyEvent &evt);
     
diff --git a/src/gui/glPane.cpp b/src/gui/glPane.cpp
index ee9b852..5df04c5 100644
--- a/src/gui/glPane.cpp
+++ b/src/gui/glPane.cpp
@@ -19,10 +19,11 @@
 
 #include <wx/progdlg.h>
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 #include "common/stringFuncs.h"
 #include "gl/select.h"
+#include "gl/tr.h"
 #include "glPane.h"
 
 
@@ -89,7 +90,11 @@ int attribList[] = {WX_GL_RGBA,
 			0,0};
 
 BasicGLPane::BasicGLPane(wxWindow* parent) :
+#if wxCHECK_VERSION(2,9,0)
+wxGLCanvas(parent, wxID_ANY,  attribList)
+#else
 wxGLCanvas(parent, wxID_ANY,  wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas"),attribList)
+#endif
 {
 	haveCameraUpdates=false;
 	applyingDevice=false;
@@ -97,6 +102,9 @@ wxGLCanvas(parent, wxID_ANY,  wxDefaultPosition, wxDefaultSize, 0, wxT("GLCanvas
 
 	keyDoubleTapTimer=new wxTimer(this,ID_KEYPRESS_TIMER);
 	lastKeyDoubleTap=(unsigned int)-1;
+#if wxCHECK_VERSION(2,9,0)
+	context=0;
+#endif
 
 	mouseMoveFactor=mouseZoomFactor=1.0f;	
 	dragging=false;
@@ -212,6 +220,24 @@ unsigned int  BasicGLPane::hoverTest(const wxPoint &p,bool &shouldRedraw)
 	return hoverObject;
 }
 
+void BasicGLPane::forceRedraw()
+{
+	//Force a paint update for the scene
+	wxPaintEvent ptEvent;
+	wxPostEvent(this,ptEvent);
+
+	//Hack to fix panel redraw commands not working under windows
+	//--
+#if defined(__WIN32) || defined(__WIN64)
+	wxYield();
+
+	Hide();
+	Show();
+
+#endif
+	//--
+}
+
 // some useful events to use
 void BasicGLPane::mouseMoved(wxMouseEvent& event) 
 {
@@ -245,13 +271,21 @@ void BasicGLPane::mouseMoved(wxMouseEvent& event)
 		if(wxm.ShiftDown())
 			keyFlags|=FLAG_SHIFT;
 
+#if wxCHECK_VERSION(2,9,0)
+		if(wxm.LeftIsDown())
+		       	mouseFlags|= SELECT_BUTTON_LEFT;
+		if(wxm.RightIsDown())
+		       	mouseFlags|= SELECT_BUTTON_RIGHT;
+		if(wxm.MiddleIsDown())
+		       	mouseFlags|= SELECT_BUTTON_MIDDLE;
+#else
 		if(wxm.LeftDown())
 		       	mouseFlags|= SELECT_BUTTON_LEFT;
 		if(wxm.RightDown())
 		       	mouseFlags|= SELECT_BUTTON_RIGHT;
 		if(wxm.MiddleDown())
 		       	mouseFlags|= SELECT_BUTTON_MIDDLE;
-
+#endif
 		//We can get  a mouse move event which reports no buttons before a mouse-up event,
 		//this occurs frequently under windows, but sometimes under GTK
 		if(!mouseFlags)
@@ -651,10 +685,7 @@ void BasicGLPane::setGlClearColour(float r, float g, float b)
 	ASSERT(r >= 0.0f && r <= 1.0f);
 	ASSERT(g >= 0.0f && g <= 1.0f);
 	ASSERT(b >= 0.0f && b <= 1.0f);
-
-	//Let openGL know that we have changed the colour.
-	glClearColor( r, g, b, 0.0f);
-
+	
 	currentScene.setBackgroundColour(r,g,b);
 	
 	Refresh();
@@ -710,8 +741,9 @@ void BasicGLPane::charEvent(wxKeyEvent& event)
  
 void BasicGLPane::resized(wxSizeEvent& evt)
 {
+#if !wxCHECK_VERSION(2,9,0)
 	wxGLCanvas::OnSize(evt);
-
+#endif
 	prepare3DViewport(0,0,getWidth(),getHeight()); 
 	wxClientDC *dc=new wxClientDC(this);
 	Refresh();
@@ -741,52 +773,22 @@ bool BasicGLPane::prepare3DViewport(int tlx, int tly, int brx, int bry)
 
 	glViewport( tlx, tly, brx-tlx, bry-tly);
 
+	float aspect = (float)(brx-tlx)/(float)(bry-tly);
 	currentScene.setWinSize(brx-tlx,bry-tly);
+	currentScene.setAspect(aspect);
 
-	//Assume no perspective transform
-	//use scene camera to achieve this
+	//Set modelview and projection matrices to the identity
+	// matrix
+	{
 	glMatrixMode( GL_PROJECTION );
 	glLoadIdentity();
-	
-	float aspect = (float)(brx-tlx)/(float)(bry-tly);
-
-	currentScene.setAspect(aspect);
+	}	
 
+	{
 	glMatrixMode( GL_MODELVIEW );
 	glLoadIdentity();
-	float r,g,b;
-	currentScene.getBackgroundColour(r,g,b);
-	glClearColor( r, g, b,1.0f );
-	glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
-
-	glEnable(GL_CULL_FACE);
-	glCullFace(GL_BACK);
-
-	glEnable(GL_DEPTH_TEST);
-	glEnable(GL_LIGHTING);
-	    
-
-	
-	glEnable(GL_LIGHT0);
-
-	
-	glShadeModel(GL_SMOOTH);
-
-	glEnable(GL_BLEND);
-	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
+	}
 	
-
-
-	glEnable(GL_COLOR_MATERIAL);
-	glColorMaterial ( GL_FRONT, GL_AMBIENT_AND_DIFFUSE ) ;
-
-	glEnable(GL_POINT_SMOOTH);
-	glEnable(GL_LINE_SMOOTH);
-
-
-
-//	  SetPosition( wxPoint(0,0) );
-
 	return true;
 }
  
@@ -805,8 +807,16 @@ void BasicGLPane::render( wxPaintEvent& evt )
 	//Prevent calls to openGL if pane not visible
 	if (!IsShown()) 
 		return;
-		
+	
+#if wxCHECK_VERSION(2,9,0)
+	if(!context)
+	{
+		context = new wxGLContext(this);
+		SetCurrent(*context);
+	}
+#else
 	wxGLCanvas::SetCurrent();
+#endif
 	if(!paneInitialised)
 	{
 		paneInitialised=true;
@@ -854,174 +864,159 @@ bool BasicGLPane::saveImage(unsigned int width, unsigned int height,
 	//We cannot seem to draw outside the current viewport.
 	//in a cross platform manner.
 	//fall back to stitching the image together by hand
-	char *pixels;
-	
-
-	pixels= new char[3*width*height];
 	int panelWidth,panelHeight;
 	GetClientSize(&panelWidth,&panelHeight);
 
-	float oldAspect = currentScene.getAspect();
-	currentScene.setAspect((float)panelHeight/(float)panelWidth);
-
-	//Check
-	if((unsigned int)width > panelWidth || (unsigned int)height> panelHeight)
-	{
-		unsigned int numTilesX,numTilesY;
-		numTilesX = width/panelWidth;
-		numTilesY = height/panelHeight;
-		if(panelWidth % width)
-			numTilesX++;
-		
-		if(panelHeight% height)
-			numTilesY++;
+	unsigned char *imageBuffer= (unsigned char*) malloc(3*(width)*height);
 
-		//Construct the image using "tiles": what we do is
-		//use the existing viewport size (as we cannot reliably change it
-		//without handling an OnSize event to resize the underlying 
-		//system buffer (eg hwnd under windows.))
-		//and then use this to reconstruct the image in a piece wise manner
-		float tileStart[2];
-
-		float fractionWidth=(float)panelWidth/(float)width;
-		float fractionHeight=(float)panelHeight/(float)height;
+	glLoadIdentity();
+	//Create TR library tile context
+	TRcontext *tr = trNew();
+	const Camera *cm = currentScene.getActiveCam();
 
-		unsigned int thisTileNum=0;
+	//Initialise tile data
+	{
+	//Tile size
+	trTileSize(tr,panelWidth,panelHeight,0);
+	//Set overall image size
+	trImageSize(tr, width, height);
+	//Set buffer for overall image
+	trImageBuffer(tr, GL_RGB, GL_UNSIGNED_BYTE, imageBuffer);
+	//Set the row order for the image
+	trRowOrder(tr, TR_BOTTOM_TO_TOP);
+
+	//Inform the tiling system about our camera config
+	BoundCube bc = currentScene.getBound();
+	float farPlane = 1.5*bc.getMaxDistanceToBox(cm->getOrigin());
 	
-		wxProgressDialog *wxD=0;	
-		if(showProgress)
+	if(cm->getProjectionMode() == PROJECTION_MODE_PERSPECTIVE)
+	{
+		if(cm->type() == CAM_LOOKAT)
 		{
-			wxD = new wxProgressDialog(wxTRANS("Image progress"), 
-						wxTRANS("Rendering tiles..."), numTilesX*numTilesY);
-
-			wxD->Show();
+			const CameraLookAt *cl =(const CameraLookAt*) currentScene.getActiveCam();
+			trPerspective(tr,cl->getFOV()/2.0,currentScene.getAspect(),
+							cl->getNearPlane(),farPlane);
 		}
-
-		std::string tmpStr,tmpStrTwo;
-		stream_cast(tmpStrTwo,numTilesX*numTilesY);
-
-		for(unsigned int tileX=0;tileX<numTilesX;tileX++)
+		else
 		{
-			tileStart[0]=(fractionWidth*(float)tileX-0.5);
-			for(unsigned int tileY=0;tileY<numTilesY; tileY++)
-			{
-				thisTileNum++;
-				stream_cast(tmpStr,thisTileNum);
-				//tell user which image tile we are making from the total image
-				tmpStr = std::string(TRANS("Tile ")) + tmpStr + std::string(TRANS(" of ")) + tmpStrTwo + "...";
-				//Update progress bar, if required
-				if(showProgress)
-					wxD->Update(thisTileNum,wxStr(tmpStr));
-
-
-				tileStart[1]=(fractionHeight*(float)tileY-0.5);
-				//Adjust the viewport such that the render generates the tile for
-				//this view. Coordinates are in normalised device coords (-1 to 1)
-				currentScene.restrictView(tileStart[0],tileStart[1],
-							  tileStart[0]+fractionWidth,tileStart[1]+fractionHeight);
-
-				//Clear the buffers and draw the openGL scene
-				glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-				currentScene.draw();
-
-				//Force openGL to block execution until draw complete
-				glFlush();
-				glFinish();
-
-				//Grab the image generated for this tile
-				glReadBuffer(GL_BACK);
-				//Set the pixel alignment to one byte, so that openGL unpacks
-				//correctly into our buffer.
-				glPushAttrib(GL_PACK_ALIGNMENT);
-				glPixelStorei(GL_PACK_ALIGNMENT,1);
-
-				//Read image
-				glReadPixels(0, 0, panelWidth,panelHeight,
-					     GL_BGR, GL_UNSIGNED_BYTE, pixels);
-				glPopAttrib();
-
-
-				//Copy the data into its target location,
-				char *pixel;
-				unsigned int pixX,pixY;
-				pixX=0;
-				pixY=0;
-				unsigned int cutoffX,cutoffY;
-				cutoffX= std::min((tileX+1)*panelWidth,width);
-				cutoffY= std::min((tileY+1)*panelHeight,height);
-				for (unsigned int ui=tileX*panelWidth; ui<=cutoffX; ui++)
-				{
-					pixY=0;
-					for (unsigned int uj=tileY*panelHeight; uj<=cutoffY; uj++)
-					{
-						pixel=pixels+(3*(pixY*panelWidth+ pixX));
-						image->SetRGB(ui,(height-1)-uj,pixel[2],pixel[1],pixel[0]);
-						pixY++;
-					}
-					pixX++;
-				}
-			}
-
+			//At this time there are no cameras of this type
+			ASSERT(false);
 		}
-		//Disable the view restriction
-		currentScene.unrestrictView();
-		if(showProgress)
-			wxD->Destroy();
-
 	}
 	else
 	{
-		//"Resize" the viewport. This wont cause the underlying buffer to resize
-		//so the imae will reduce, but be surrounded by borders.
-		//Its a bit of a hack, but it should work
-		prepare3DViewport(0,0,width,height);
+		float aspect=currentScene.getAspect();
+		float orthoScale=cm->getOrthoScale();
+		trOrtho(tr,-orthoScale*aspect,orthoScale*aspect,
+				-orthoScale,orthoScale,0.0f,farPlane);
+
+	}
+	}
+
+
+	//Obtain tile count
+	unsigned int nRow,nCol;
+	nRow=trGet(tr,TR_ROWS);
+	nCol=trGet(tr,TR_COLUMNS);
+
+	wxProgressDialog *wxD=0;	
+
+
+	//Only show progress for mutliple tiles
+	std::string tmpStr,tmpStrTwo;
+	stream_cast(tmpStrTwo,nRow*nCol);
 	
-		//Clear the buffers and draw the openGL scene
-		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-		currentScene.draw();
-		glFinish();
+	showProgress=showProgress && ( nRow*nCol > 1);
+	if(showProgress)
+	{
+		wxD = new wxProgressDialog(wxTRANS("Image progress"), 
+					wxTRANS("Rendering tiles..."), nRow*nCol);
 
-		SwapBuffers();
-		glReadBuffer(GL_BACK);
-		
-		//Set the pixel alignment to one byte, so that openGL unpacks 
-		//correctly into our buffer.
-		glPushAttrib(GL_PACK_ALIGNMENT);
-		glPixelStorei(GL_PACK_ALIGNMENT,1);
-		//Read the image
-		glReadPixels(0, 0, width,height, 
-			GL_BGR, GL_UNSIGNED_BYTE, pixels);
+		wxD->Show();
+	}
 
+	//HACK: Flip the all but scene's light z coordinate
+	// for some reason, the frustrum has an inversion
+	// somwhere in the coordinate system, and I can't find it!
+	// inverting the tile frustrum ends up with the depth test 
+	// also inverting.
+	float oldLightPos[4];
+	currentScene.getLightPos(oldLightPos);
+	const int UNTRANS_AXIS=2;
+	for(size_t ui=0;ui<3;ui++)
+	{
+		if(ui == UNTRANS_AXIS)
+			continue;
 
-		glPopAttrib();
+		oldLightPos[ui]=-oldLightPos[ui];
+	
+	}
+	currentScene.setLightPos(oldLightPos);
 	
-		char *pixel;
+
+	//Loop through the tiles
+	unsigned int thisTileNum=0;
+	int haveMoreTiles=1;
+	while(haveMoreTiles)
+	{
 		
-		//copy rows & columns into image
-		for(unsigned int ui=0;ui<width;ui++)
-		{
-			for(unsigned int uj=0;uj<height;uj++)
-			{
-				pixel=pixels+(3*(uj*width + ui));
-				image->SetRGB(ui,(height-1)-uj,pixel[2],pixel[1],pixel[0]);
-			}
-		}
+		
+		thisTileNum++;
+		//tell user which image tile we are making from the total image
+		stream_cast(tmpStr,thisTileNum);
+		tmpStr = std::string(TRANS("Tile ")) + tmpStr + std::string(TRANS(" of ")) + tmpStrTwo + "...";
+		//Update progress bar, if required
+		if(showProgress)
+			wxD->Update(thisTileNum,wxStr(tmpStr));
+
+		//Manually set the camera
+		//--
+		glMatrixMode(GL_MODELVIEW);
+		glPushMatrix();
+		glLoadIdentity();
+		
+		if(cm->type() == CAM_LOOKAT)
+			((const CameraLookAt *)cm)->lookAt();
+		//--
+	
+		//Start the tile
+		trBeginTile(tr);
+		currentScene.draw(true);
+
+		glPopMatrix();
+
+		haveMoreTiles=trEndTile(tr);
 
-		//Restore viewport
-		prepare3DViewport(0,0,getWidth(),getHeight());
 	}
 
-	delete[] pixels;
+	//re-set light coordinates
+	for(size_t ui=0;ui<3;ui++)
+	{
+		if (ui == UNTRANS_AXIS)
+			continue;
+		oldLightPos[ui]=-oldLightPos[ui];
+	}
+	currentScene.setLightPos(oldLightPos);
+
+	if(showProgress)
+		wxD->Destroy();
+	trDelete(tr);
 
+	//Transfer pointer to image, which will perform free-ing of the buffer
+	image->SetData(imageBuffer);
+	
+	//HACK : Tiling function returns upside-down image. Fix in post-process
+	// argument is to set mirror axis such that x axis is unchanged
+	*image=image->Mirror(false);
+	
 	bool isOK=image->SaveFile(wxCStr(filename),wxBITMAP_TYPE_PNG);
 
-	currentScene.setAspect(oldAspect);
 	delete image;
 
-    if (needPostPaint) {
-        wxPaintEvent event;
-        wxPostEvent(this,event);
-    }
+	if (needPostPaint) {
+		wxPaintEvent event;
+		wxPostEvent(this,event);
+	}
 
 	return isOK;
 }
@@ -1042,7 +1037,7 @@ bool BasicGLPane::saveImageSequence(unsigned int resX, unsigned int resY, unsign
 	ASSERT(!currentScene.haveTempCam());
 	std::string outFile;
 	wxProgressDialog *wxD = new wxProgressDialog(wxTRANS("Animation progress"), 
-					wxTRANS("Rendering sequence..."), nFrames,this,wxPD_CAN_ABORT );
+					wxTRANS("Rendering sequence..."), nFrames,this,wxPD_CAN_ABORT|wxPD_APP_MODAL );
 
 	wxD->Show();
 	std::string tmpStr,tmpStrTwo;
diff --git a/src/gui/glPane.h b/src/gui/glPane.h
index 87bff4f..5499d9e 100644
--- a/src/gui/glPane.h
+++ b/src/gui/glPane.h
@@ -28,6 +28,11 @@
 class BasicGLPane : public wxGLCanvas
 {
 private:
+
+#if wxCHECK_VERSION(2,9,0)
+	wxGLContext *context;
+#endif
+
 	wxStatusBar *parentStatusBar;
 	wxTimer *parentStatusTimer;
 	unsigned int statusDelay;	
@@ -96,7 +101,12 @@ public:
     
 	int getWidth();
 	int getHeight();
-  
+
+	//Panel will not update if a child window for some platforms, using
+	// normal wx reresh code. Force it.
+	// See, eg http://stackoverflow.com/questions/6458451/force-repaint-of-wxpython-window-wxmpl-plot
+	void forceRedraw();
+
 
 	void setMouseMoveFactor(float f) { mouseMoveFactor=f;};
 	void setMouseZoomFactor(float f) { mouseZoomFactor=f;};
diff --git a/src/gui/glade-skeleton/animateFilterDialog.wxg b/src/gui/glade-skeleton/animateFilterDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/animateSubDialogs/choiceKeyFrameDialog.wxg b/src/gui/glade-skeleton/animateSubDialogs/choiceKeyFrameDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/animateSubDialogs/colourChooserDialog.wxg b/src/gui/glade-skeleton/animateSubDialogs/colourChooserDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/animateSubDialogs/realKeyFrameDialog.wxg b/src/gui/glade-skeleton/animateSubDialogs/realKeyFrameDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/animateSubDialogs/stringKeyFrameDialog.wxg b/src/gui/glade-skeleton/animateSubDialogs/stringKeyFrameDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/autosaveDialog.wxg b/src/gui/glade-skeleton/autosaveDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/errorDialog.wxg b/src/gui/glade-skeleton/errorDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/mainWindow.wxg b/src/gui/glade-skeleton/mainWindow.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/glade-skeleton/prefDialog.cpp b/src/gui/glade-skeleton/prefDialog.cpp
new file mode 100644
index 0000000..3f19afa
--- /dev/null
+++ b/src/gui/glade-skeleton/prefDialog.cpp
@@ -0,0 +1,272 @@
+// -*- C++ -*-
+//
+// generated by wxGlade 0.6.8 on Sun Nov 10 18:05:15 2013
+//
+// Example for compiling a single file project under Linux using g++:
+//  g++ MyApp.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp
+//
+// Example for compiling a multi file project under Linux using g++:
+//  g++ main.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp Dialog1.cpp Frame1.cpp
+//
+
+#include "prefDialog.h"
+
+// begin wxGlade: ::extracode
+// end wxGlade
+
+
+
+PrefDialog::PrefDialog(wxWindow* parent, int id, const wxString& title, const wxPoint& pos, const wxSize& size, long style):
+    wxDialog(parent, id, title, pos, size, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxTHICK_FRAME)
+{
+    // begin wxGlade: PrefDialog::PrefDialog
+    notePrefPanels = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
+    notePrefPanels_pane_3 = new wxPanel(notePrefPanels, wxID_ANY);
+    panelStartup = new wxPanel(notePrefPanels, wxID_ANY);
+    panelFilters = new wxPanel(notePrefPanels, wxID_ANY);
+    sizer_2_staticbox = new wxStaticBox(panelStartup, wxID_ANY, _("Panel Display"));
+    updateSizer_staticbox = new wxStaticBox(panelStartup, wxID_ANY, _("Online Updates"));
+    sizer_7_staticbox = new wxStaticBox(notePrefPanels_pane_3, wxID_ANY, _("Startup"));
+    sizerCamSpeed_staticbox = new wxStaticBox(notePrefPanels_pane_3, wxID_ANY, _("Speed"));
+    filterPropSizer_staticbox = new wxStaticBox(panelFilters, wxID_ANY, _("Filter Defaults"));
+    lblFilters = new wxStaticText(panelFilters, wxID_ANY, _("Available Filters"));
+    const wxString *listFilters_choices = NULL;
+    listFilters = new wxListBox(panelFilters, ID_LIST_FILTERS, wxDefaultPosition, wxDefaultSize, 0, listFilters_choices, wxLB_SINGLE|wxLB_SORT);
+    filterGridProperties = new wxGrid(panelFilters, ID_GRID_PROPERTIES);
+    filterBtnResetAllFilters = new wxButton(panelFilters, wxID_ANY, _("Reset All"));
+    filterResetDefaultFilter = new wxButton(panelFilters, wxID_ANY, _("Reset"));
+    const wxString comboPanelStartMode_choices[] = {
+        _("Always show"),
+        _("Remember"),
+        _("Specify")
+    };
+    comboPanelStartMode = new wxComboBox(panelStartup, ID_START_COMBO_PANEL, wxT(""), wxDefaultPosition, wxDefaultSize, 3, comboPanelStartMode_choices, wxCB_DROPDOWN|wxCB_SIMPLE|wxCB_DROPDOWN|wxCB_READONLY);
+    chkControl = new wxCheckBox(panelStartup, ID_START_CHECK_CONTROL, _("Control Pane"));
+    chkRawData = new wxCheckBox(panelStartup, ID_START_CHECK_RAWDATA, _("Raw Data Panel"));
+    chkPlotlist = new wxCheckBox(panelStartup, ID_START_CHECK_PLOTLIST, _("Plot List"));
+    checkAllowOnlineUpdate = new wxCheckBox(panelStartup, wxID_ANY, _("Notify periodically about available updates"));
+    chkPreferOrtho = new wxCheckBox(notePrefPanels_pane_3, wxID_ANY, _("Prefer orthographic at startup"));
+    lblMoveSpeed = new wxStaticText(notePrefPanels_pane_3, wxID_ANY, _("Move Rate"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
+    labelSlowCamMoveRate = new wxStaticText(notePrefPanels_pane_3, wxID_ANY, _("(slow)"));
+    sliderCamMoveRate = new wxSlider(notePrefPanels_pane_3, ID_MOUSE_MOVE_SLIDER, 1, 1, 100);
+    labelFastCamMoveRate = new wxStaticText(notePrefPanels_pane_3, wxID_ANY, _("(fast)"));
+    lblZoomSpeed = new wxStaticText(notePrefPanels_pane_3, wxID_ANY, _("Zoom Rate"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
+    labelSlowCamZoomRate = new wxStaticText(notePrefPanels_pane_3, wxID_ANY, _("(slow)"));
+    sliderCamZoomRate = new wxSlider(notePrefPanels_pane_3, ID_MOUSE_ZOOM_SLIDER, 1, 1, 100);
+    labelSlowFastZoomRate = new wxStaticText(notePrefPanels_pane_3, ID_MOUSE_ZOOM_SLIDER, _("(fast)"));
+    btnOK = new wxButton(this, wxID_OK, wxEmptyString);
+    btnCancel = new wxButton(this, wxID_CANCEL, wxEmptyString);
+
+    set_properties();
+    do_layout();
+    // end wxGlade
+}
+
+
+void PrefDialog::set_properties()
+{
+    // begin wxGlade: PrefDialog::set_properties
+    SetTitle(_("Preferences"));
+    SetSize(wxSize(640, 487));
+    filterBtnResetAllFilters->SetToolTip(_("Reset all filter initial values back to program defaults"));
+    filterResetDefaultFilter->SetToolTip(_("Reset the filter initial values back to program defaults"));
+    comboPanelStartMode->SetToolTip(_("Set the method of panel layout when starting the program"));
+    comboPanelStartMode->SetSelection(0);
+    checkAllowOnlineUpdate->SetToolTip(_("Lets the program check the internet to see if updates to the program version are available, then notifies you about updates now and again."));
+    chkPreferOrtho->SetToolTip(_("By default, use an orthographic camera at startup. State files will override this preference."));
+    sliderCamMoveRate->SetToolTip(_("Camera translation, orbit and swivel rates. "));
+    sliderCamZoomRate->SetToolTip(_("Camera zooming rate."));
+    // end wxGlade
+}
+
+
+void PrefDialog::do_layout()
+{
+    // begin wxGlade: PrefDialog::do_layout
+    wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* exitButtonSizer = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizer_5 = new wxBoxSizer(wxVERTICAL);
+    sizerCamSpeed_staticbox->Lower();
+    wxStaticBoxSizer* sizerCamSpeed = new wxStaticBoxSizer(sizerCamSpeed_staticbox, wxVERTICAL);
+    wxBoxSizer* sizer_6_copy = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizer_6 = new wxBoxSizer(wxHORIZONTAL);
+    sizer_7_staticbox->Lower();
+    wxStaticBoxSizer* sizer_7 = new wxStaticBoxSizer(sizer_7_staticbox, wxHORIZONTAL);
+    wxBoxSizer* sizer_1 = new wxBoxSizer(wxVERTICAL);
+    updateSizer_staticbox->Lower();
+    wxStaticBoxSizer* updateSizer = new wxStaticBoxSizer(updateSizer_staticbox, wxVERTICAL);
+    sizer_2_staticbox->Lower();
+    wxStaticBoxSizer* sizer_2 = new wxStaticBoxSizer(sizer_2_staticbox, wxVERTICAL);
+    wxBoxSizer* sizer_3 = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* sizer_4 = new wxBoxSizer(wxVERTICAL);
+    filterPropSizer_staticbox->Lower();
+    wxStaticBoxSizer* filterPropSizer = new wxStaticBoxSizer(filterPropSizer_staticbox, wxHORIZONTAL);
+    wxBoxSizer* filterRightSideSizer = new wxBoxSizer(wxVERTICAL);
+    wxBoxSizer* resetButtonSizer = new wxBoxSizer(wxHORIZONTAL);
+    wxBoxSizer* filterLeftSizer = new wxBoxSizer(wxVERTICAL);
+    filterLeftSizer->Add(lblFilters, 0, 0, 0);
+    filterLeftSizer->Add(listFilters, 1, wxEXPAND, 0);
+    filterPropSizer->Add(filterLeftSizer, 1, wxEXPAND, 0);
+    filterPropSizer->Add(20, 20, 0, 0, 0);
+    filterRightSideSizer->Add(filterGridProperties, 1, wxEXPAND, 0);
+    resetButtonSizer->Add(filterBtnResetAllFilters, 0, 0, 0);
+    resetButtonSizer->Add(filterResetDefaultFilter, 0, 0, 0);
+    resetButtonSizer->Add(20, 20, 1, 0, 0);
+    filterRightSideSizer->Add(resetButtonSizer, 0, wxEXPAND, 0);
+    filterPropSizer->Add(filterRightSideSizer, 2, wxEXPAND, 0);
+    panelFilters->SetSizer(filterPropSizer);
+    sizer_2->Add(comboPanelStartMode, 0, 0, 0);
+    sizer_3->Add(20, 20, 0, 0, 0);
+    sizer_4->Add(chkControl, 0, 0, 0);
+    sizer_4->Add(chkRawData, 0, 0, 0);
+    sizer_4->Add(chkPlotlist, 0, 0, 0);
+    sizer_3->Add(sizer_4, 1, wxEXPAND, 0);
+    sizer_2->Add(sizer_3, 1, wxEXPAND, 0);
+    sizer_1->Add(sizer_2, 0, wxALL|wxEXPAND, 5);
+    updateSizer->Add(checkAllowOnlineUpdate, 0, 0, 0);
+    sizer_1->Add(updateSizer, 0, wxALL|wxEXPAND, 5);
+    panelStartup->SetSizer(sizer_1);
+    sizer_7->Add(chkPreferOrtho, 0, wxALL, 5);
+    sizer_5->Add(sizer_7, 0, wxEXPAND, 0);
+    sizer_6->Add(lblMoveSpeed, 0, wxALIGN_CENTER_VERTICAL, 0);
+    sizer_6->Add(20, 20, 0, 0, 0);
+    sizer_6->Add(labelSlowCamMoveRate, 0, wxALIGN_CENTER_VERTICAL, 0);
+    sizer_6->Add(sliderCamMoveRate, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 0);
+    sizer_6->Add(labelFastCamMoveRate, 0, wxALIGN_CENTER_VERTICAL, 0);
+    sizerCamSpeed->Add(sizer_6, 1, wxEXPAND, 0);
+    sizer_6_copy->Add(lblZoomSpeed, 0, wxALIGN_CENTER_VERTICAL, 0);
+    sizer_6_copy->Add(20, 20, 0, 0, 0);
+    sizer_6_copy->Add(labelSlowCamZoomRate, 0, wxALIGN_CENTER_VERTICAL, 0);
+    sizer_6_copy->Add(sliderCamZoomRate, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 0);
+    sizer_6_copy->Add(labelSlowFastZoomRate, 0, wxALIGN_CENTER_VERTICAL, 0);
+    sizerCamSpeed->Add(sizer_6_copy, 1, wxEXPAND, 0);
+    sizer_5->Add(sizerCamSpeed, 1, wxEXPAND, 0);
+    notePrefPanels_pane_3->SetSizer(sizer_5);
+    notePrefPanels->AddPage(panelFilters, _("Pref"));
+    notePrefPanels->AddPage(panelStartup, _("Startup"));
+    notePrefPanels->AddPage(notePrefPanels_pane_3, _("Camera"));
+    panelSizer->Add(notePrefPanels, 2, wxEXPAND, 0);
+    exitButtonSizer->Add(20, 20, 1, wxEXPAND, 0);
+    exitButtonSizer->Add(btnOK, 0, wxTOP, 8);
+    exitButtonSizer->Add(btnCancel, 0, wxLEFT|wxTOP|wxBOTTOM, 8);
+    exitButtonSizer->Add(10, 20, 0, 0, 0);
+    panelSizer->Add(exitButtonSizer, 0, wxEXPAND, 0);
+    SetSizer(panelSizer);
+    Layout();
+    // end wxGlade
+}
+
+
+BEGIN_EVENT_TABLE(PrefDialog, wxDialog)
+    // begin wxGlade: PrefDialog::event_table
+    EVT_LISTBOX(ID_LIST_FILTERS, PrefDialog::OnListClick)
+    EVT_GRID_CMD_CELL_CHANGE(ID_GRID_PROPERTIES, PrefDialog::OnFilterCellChange)
+    EVT_GRID_CMD_CELL_LEFT_CLICK(ID_GRID_PROPERTIES, PrefDialog::OnFilterCellClick)
+    EVT_COMBOBOX(ID_START_COMBO_PANEL, PrefDialog::OnStartupPanelCombo)
+    EVT_CHECKBOX(ID_START_CHECK_CONTROL, PrefDialog::OnStartupCheckControl)
+    EVT_CHECKBOX(ID_START_CHECK_RAWDATA, PrefDialog::OnStartupCheckRawData)
+    EVT_CHECKBOX(ID_START_CHECK_PLOTLIST, PrefDialog::OnStartupCheckPlotList)
+    EVT_CHECKBOX(wxID_ANY, PrefDialog::OnCheckPreferOrtho)
+    EVT_COMMAND_SCROLL(ID_MOUSE_MOVE_SLIDER, PrefDialog::OnMouseMoveSlider)
+    EVT_COMMAND_SCROLL(ID_MOUSE_ZOOM_SLIDER, PrefDialog::OnMouseZoomSlider)
+    // end wxGlade
+END_EVENT_TABLE();
+
+
+void PrefDialog::OnListClick(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnListClick) not implemented yet"));
+}
+
+void PrefDialog::OnFilterCellChange(wxGridEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnFilterCellChange) not implemented yet"));
+}
+
+void PrefDialog::OnFilterCellClick(wxGridEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnFilterCellClick) not implemented yet"));
+}
+
+void PrefDialog::OnStartupPanelCombo(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnStartupPanelCombo) not implemented yet"));
+}
+
+void PrefDialog::OnStartupCheckControl(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnStartupCheckControl) not implemented yet"));
+}
+
+void PrefDialog::OnStartupCheckRawData(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnStartupCheckRawData) not implemented yet"));
+}
+
+void PrefDialog::OnStartupCheckPlotList(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnStartupCheckPlotList) not implemented yet"));
+}
+
+void PrefDialog::OnCheckPreferOrtho(wxCommandEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnCheckPreferOrtho) not implemented yet"));
+}
+
+void PrefDialog::OnMouseMoveSlider(wxScrollEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnMouseMoveSlider) not implemented yet"));
+}
+
+void PrefDialog::OnMouseZoomSlider(wxScrollEvent &event)
+{
+    event.Skip();
+    // notify the user that he hasn't implemented the event handler yet
+    wxLogDebug(wxT("Event handler (PrefDialog::OnMouseZoomSlider) not implemented yet"));
+}
+
+
+// wxGlade: add PrefDialog event handlers
+
+
+class MyApp: public wxApp {
+public:
+    bool OnInit();
+protected:
+    wxLocale m_locale;  // locale we'll be using
+};
+
+IMPLEMENT_APP(MyApp)
+
+bool MyApp::OnInit()
+{
+    m_locale.Init();
+#ifdef APP_LOCALE_DIR
+    m_locale.AddCatalogLookupPathPrefix(wxT(APP_LOCALE_DIR));
+#endif
+    m_locale.AddCatalog(wxT(APP_CATALOG));
+
+    wxInitAllImageHandlers();
+    PrefDialog* dlgPreference = new PrefDialog(NULL, wxID_ANY, wxEmptyString);
+    SetTopWindow(dlgPreference);
+    dlgPreference->Show();
+    return true;
+}
\ No newline at end of file
diff --git a/src/gui/glade-skeleton/prefDialog.h b/src/gui/glade-skeleton/prefDialog.h
new file mode 100644
index 0000000..8845c97
--- /dev/null
+++ b/src/gui/glade-skeleton/prefDialog.h
@@ -0,0 +1,96 @@
+// -*- C++ -*-
+//
+// generated by wxGlade 0.6.8 on Sun Nov 10 18:05:15 2013
+//
+// Example for compiling a single file project under Linux using g++:
+//  g++ MyApp.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp
+//
+// Example for compiling a multi file project under Linux using g++:
+//  g++ main.cpp $(wx-config --libs) $(wx-config --cxxflags) -o MyApp Dialog1.cpp Frame1.cpp
+//
+
+#ifndef PREFDIALOG_H
+#define PREFDIALOG_H
+
+#include <wx/wx.h>
+#include <wx/image.h>
+#include "wx/intl.h"
+
+#ifndef APP_CATALOG
+#define APP_CATALOG "app"  // replace with the appropriate catalog name
+#endif
+
+
+// begin wxGlade: ::dependencies
+#include <wx/notebook.h>
+#include <wx/grid.h>
+// end wxGlade
+
+// begin wxGlade: ::extracode
+// end wxGlade
+
+
+class PrefDialog: public wxDialog {
+public:
+    // begin wxGlade: PrefDialog::ids
+    // end wxGlade
+
+    PrefDialog(wxWindow* parent, int id, const wxString& title, const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE);
+
+private:
+    // begin wxGlade: PrefDialog::methods
+    void set_properties();
+    void do_layout();
+    // end wxGlade
+
+protected:
+    // begin wxGlade: PrefDialog::attributes
+    wxStaticBox* sizerCamSpeed_staticbox;
+    wxStaticBox* sizer_7_staticbox;
+    wxStaticBox* updateSizer_staticbox;
+    wxStaticBox* sizer_2_staticbox;
+    wxStaticBox* filterPropSizer_staticbox;
+    wxStaticText* lblFilters;
+    wxListBox* listFilters;
+    wxGrid* filterGridProperties;
+    wxButton* filterBtnResetAllFilters;
+    wxButton* filterResetDefaultFilter;
+    wxPanel* panelFilters;
+    wxComboBox* comboPanelStartMode;
+    wxCheckBox* chkControl;
+    wxCheckBox* chkRawData;
+    wxCheckBox* chkPlotlist;
+    wxCheckBox* checkAllowOnlineUpdate;
+    wxPanel* panelStartup;
+    wxCheckBox* chkPreferOrtho;
+    wxStaticText* lblMoveSpeed;
+    wxStaticText* labelSlowCamMoveRate;
+    wxSlider* sliderCamMoveRate;
+    wxStaticText* labelFastCamMoveRate;
+    wxStaticText* lblZoomSpeed;
+    wxStaticText* labelSlowCamZoomRate;
+    wxSlider* sliderCamZoomRate;
+    wxStaticText* labelSlowFastZoomRate;
+    wxPanel* notePrefPanels_pane_3;
+    wxNotebook* notePrefPanels;
+    wxButton* btnOK;
+    wxButton* btnCancel;
+    // end wxGlade
+
+    DECLARE_EVENT_TABLE();
+
+public:
+    virtual void OnListClick(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnFilterCellChange(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnFilterCellClick(wxGridEvent &event); // wxGlade: <event_handler>
+    virtual void OnStartupPanelCombo(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnStartupCheckControl(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnStartupCheckRawData(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnStartupCheckPlotList(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnCheckPreferOrtho(wxCommandEvent &event); // wxGlade: <event_handler>
+    virtual void OnMouseMoveSlider(wxScrollEvent &event); // wxGlade: <event_handler>
+    virtual void OnMouseZoomSlider(wxScrollEvent &event); // wxGlade: <event_handler>
+}; // wxGlade: end class
+
+
+#endif // PREFDIALOG_H
diff --git a/src/gui/glade-skeleton/preferencesDialog.wxg b/src/gui/glade-skeleton/preferencesDialog.wxg
old mode 100644
new mode 100755
index 29b04fe..103632f
--- a/src/gui/glade-skeleton/preferencesDialog.wxg
+++ b/src/gui/glade-skeleton/preferencesDialog.wxg
@@ -1,11 +1,11 @@
 <?xml version="1.0"?>
-<!-- generated by wxGlade 0.6.3 on Thu Jun 16 23:01:20 2011 -->
+<!-- generated by wxGlade 0.6.8 on Sun Nov 10 18:05:13 2013 -->
 
-<application path="/home/user/Desktop/3Depict/src/glade-skeleton/prefDialog.cpp" name="" class="" option="0" language="C++" top_window="dlgPreference" encoding="ISO-8859-1" use_gettext="1" overwrite="1" use_new_namespace="1" for_version="2.8" is_template="0">
-    <object class="prefDialog" name="dlgPreference" base="EditDialog">
+<application path="/home/pcuser/code/3Depict/src/gui/glade-skeleton/prefDialog.cpp" name="" class="" option="0" language="C++" top_window="dlgPreference" encoding="ISO-8859-1" use_gettext="1" overwrite="1" use_new_namespace="1" for_version="2.8" is_template="0" indent_amount="4" indent_symbol="space" source_extension=".cpp" header_extension=".h">
+    <object class="PrefDialog" name="dlgPreference" base="EditDialog">
         <style>wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxTHICK_FRAME</style>
         <title>Preferences</title>
-        <size>642, 487</size>
+        <size>640, 487</size>
         <object class="wxBoxSizer" name="panelSizer" base="EditBoxSizer">
             <orient>wxVERTICAL</orient>
             <object class="sizeritem">
@@ -74,22 +74,20 @@
                                         <border>0</border>
                                         <option>1</option>
                                         <object class="wxGrid" name="filterGridProperties" base="EditGrid">
-                                            <rows_number>10</rows_number>
                                             <id>ID_GRID_PROPERTIES</id>
+                                            <create_grid>0</create_grid>
+                                            <enable_editing>1</enable_editing>
+                                            <enable_grid_lines>1</enable_grid_lines>
+                                            <enable_col_resize>1</enable_col_resize>
+                                            <enable_row_resize>1</enable_row_resize>
+                                            <enable_grid_resize>1</enable_grid_resize>
                                             <columns>
                                                 <column size=""></column>
                                             </columns>
-                                            <selection_mode>wxGrid.wxGridSelectCells</selection_mode>
-                                            <enable_grid_lines>1</enable_grid_lines>
-                                            <enable_grid_resize>1</enable_grid_resize>
-                                            <enable_editing>1</enable_editing>
-                                            <create_grid>0</create_grid>
-                                            <enable_row_resize>1</enable_row_resize>
                                             <events>
                                                 <handler event="EVT_GRID_CMD_CELL_LEFT_CLICK">OnFilterCellClick</handler>
                                                 <handler event="EVT_GRID_CMD_CELL_CHANGE">OnFilterCellChange</handler>
                                             </events>
-                                            <enable_col_resize>1</enable_col_resize>
                                         </object>
                                     </object>
                                     <object class="sizeritem">
@@ -103,6 +101,7 @@
                                                 <option>0</option>
                                                 <object class="wxButton" name="filterBtnResetAllFilters" base="EditButton">
                                                     <label>Reset All</label>
+                                                    <tooltip>Reset all filter initial values back to program defaults</tooltip>
                                                 </object>
                                             </object>
                                             <object class="sizeritem">
@@ -110,6 +109,7 @@
                                                 <option>0</option>
                                                 <object class="wxButton" name="filterResetDefaultFilter" base="EditButton">
                                                     <label>Reset</label>
+                                                    <tooltip>Reset the filter initial values back to program defaults</tooltip>
                                                 </object>
                                             </object>
                                             <object class="sizeritem">
@@ -178,7 +178,7 @@
                                                     <object class="sizeritem">
                                                         <border>0</border>
                                                         <option>0</option>
-                                                        <object class="wxCheckBox" name="checkControl" base="EditCheckBox">
+                                                        <object class="wxCheckBox" name="chkControl" base="EditCheckBox">
                                                             <label>Control Pane</label>
                                                             <id>ID_START_CHECK_CONTROL</id>
                                                             <events>
@@ -226,7 +226,7 @@
                                         <option>0</option>
                                         <object class="wxCheckBox" name="checkAllowOnlineUpdate" base="EditCheckBox">
                                             <label>Notify periodically about available updates</label>
-                                            <tooltip>Lets the program check the internet to see if updates to the program version are available, then bugs you about it now and again.</tooltip>
+                                            <tooltip>Lets the program check the internet to see if updates to the program version are available, then notifies you about updates now and again.</tooltip>
                                         </object>
                                     </object>
                                 </object>
@@ -235,60 +235,25 @@
                     </object>
                     <object class="wxPanel" name="notePrefPanels_pane_3" base="EditPanel">
                         <style>wxTAB_TRAVERSAL</style>
-                        <object class="wxStaticBoxSizer" name="sizerCamSpeed" base="EditStaticBoxSizer">
+                        <object class="wxBoxSizer" name="sizer_5" base="EditBoxSizer">
                             <orient>wxVERTICAL</orient>
-                            <label>Camera Speed</label>
                             <object class="sizeritem">
                                 <flag>wxEXPAND</flag>
                                 <border>0</border>
-                                <option>1</option>
-                                <object class="wxBoxSizer" name="sizer_6" base="EditBoxSizer">
+                                <option>0</option>
+                                <object class="wxStaticBoxSizer" name="sizer_7" base="EditStaticBoxSizer">
                                     <orient>wxHORIZONTAL</orient>
+                                    <label>Startup</label>
                                     <object class="sizeritem">
-                                        <flag>wxALIGN_CENTER_VERTICAL</flag>
-                                        <border>0</border>
+                                        <flag>wxALL</flag>
+                                        <border>5</border>
                                         <option>0</option>
-                                        <object class="wxStaticText" name="lblMoveSpeed" base="EditStaticText">
-                                            <style>wxALIGN_CENTRE</style>
-                                            <attribute>1</attribute>
-                                            <label>Move Rate</label>
-                                        </object>
-                                    </object>
-                                    <object class="sizeritem">
-                                        <border>0</border>
-                                        <option>0</option>
-                                        <object class="spacer" name="spacer" base="EditSpacer">
-                                            <height>20</height>
-                                            <width>20</width>
-                                        </object>
-                                    </object>
-                                    <object class="sizeritem">
-                                        <flag>wxALIGN_CENTER_VERTICAL</flag>
-                                        <border>0</border>
-                                        <option>0</option>
-                                        <object class="wxStaticText" name="labelSlowCamMoveRate" base="EditStaticText">
-                                            <attribute>1</attribute>
-                                            <label>(slow)</label>
-                                        </object>
-                                    </object>
-                                    <object class="sizeritem">
-                                        <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL</flag>
-                                        <border>0</border>
-                                        <option>1</option>
-                                        <object class="wxSlider" name="sliderCamMoveRate" base="EditSlider">
-                                            <style>wxSL_HORIZONTAL</style>
-                                            <tooltip>Camera tanslation, orbit and swivel rates. </tooltip>
-                                            <range>1, 100</range>
-                                            <value>1</value>
-                                        </object>
-                                    </object>
-                                    <object class="sizeritem">
-                                        <flag>wxALIGN_CENTER_VERTICAL</flag>
-                                        <border>0</border>
-                                        <option>0</option>
-                                        <object class="wxStaticText" name="labelFastCamMoveRate" base="EditStaticText">
-                                            <attribute>1</attribute>
-                                            <label>(fast)</label>
+                                        <object class="wxCheckBox" name="chkPreferOrtho" base="EditCheckBox">
+                                            <label>Prefer orthographic at startup</label>
+                                            <tooltip>By default, use an orthographic camera at startup. State files will override this preference.</tooltip>
+                                            <events>
+                                                <handler event="EVT_CHECKBOX">OnCheckPreferOrtho</handler>
+                                            </events>
                                         </object>
                                     </object>
                                 </object>
@@ -297,53 +262,126 @@
                                 <flag>wxEXPAND</flag>
                                 <border>0</border>
                                 <option>1</option>
-                                <object class="wxBoxSizer" name="sizer_6_copy" base="EditBoxSizer">
-                                    <orient>wxHORIZONTAL</orient>
-                                    <object class="sizeritem">
-                                        <flag>wxALIGN_CENTER_VERTICAL</flag>
-                                        <border>0</border>
-                                        <option>0</option>
-                                        <object class="wxStaticText" name="lblZoomSpeed" base="EditStaticText">
-                                            <style>wxALIGN_CENTRE</style>
-                                            <attribute>1</attribute>
-                                            <label>Zoom Rate</label>
-                                        </object>
-                                    </object>
-                                    <object class="sizeritem">
-                                        <border>0</border>
-                                        <option>0</option>
-                                        <object class="spacer" name="spacer" base="EditSpacer">
-                                            <height>20</height>
-                                            <width>20</width>
-                                        </object>
-                                    </object>
-                                    <object class="sizeritem">
-                                        <flag>wxALIGN_CENTER_VERTICAL</flag>
-                                        <border>0</border>
-                                        <option>0</option>
-                                        <object class="wxStaticText" name="labelSlowCamZoomRate" base="EditStaticText">
-                                            <attribute>1</attribute>
-                                            <label>(slow)</label>
-                                        </object>
-                                    </object>
+                                <object class="wxStaticBoxSizer" name="sizerCamSpeed" base="EditStaticBoxSizer">
+                                    <orient>wxVERTICAL</orient>
+                                    <label>Speed</label>
                                     <object class="sizeritem">
-                                        <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL</flag>
+                                        <flag>wxEXPAND</flag>
                                         <border>0</border>
                                         <option>1</option>
-                                        <object class="wxSlider" name="sliderCamZoomRate" base="EditSlider">
-                                            <style>wxSL_HORIZONTAL</style>
-                                            <tooltip>Camera zooming rate.</tooltip>
-                                            <range>1, 100</range>
-                                            <value>1</value>
+                                        <object class="wxBoxSizer" name="sizer_6" base="EditBoxSizer">
+                                            <orient>wxHORIZONTAL</orient>
+                                            <object class="sizeritem">
+                                                <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="wxStaticText" name="lblMoveSpeed" base="EditStaticText">
+                                                    <style>wxALIGN_CENTRE</style>
+                                                    <attribute>1</attribute>
+                                                    <label>Move Rate</label>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="spacer" name="spacer" base="EditSpacer">
+                                                    <height>20</height>
+                                                    <width>20</width>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="wxStaticText" name="labelSlowCamMoveRate" base="EditStaticText">
+                                                    <attribute>1</attribute>
+                                                    <label>(slow)</label>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>1</option>
+                                                <object class="wxSlider" name="sliderCamMoveRate" base="EditSlider">
+                                                    <style>wxSL_HORIZONTAL</style>
+                                                    <tooltip>Camera translation, orbit and swivel rates. </tooltip>
+                                                    <id>ID_MOUSE_MOVE_SLIDER</id>
+                                                    <range>1, 100</range>
+                                                    <value>1</value>
+                                                    <events>
+                                                        <handler event="EVT_COMMAND_SCROLL">OnMouseMoveSlider</handler>
+                                                    </events>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="wxStaticText" name="labelFastCamMoveRate" base="EditStaticText">
+                                                    <attribute>1</attribute>
+                                                    <label>(fast)</label>
+                                                </object>
+                                            </object>
                                         </object>
                                     </object>
                                     <object class="sizeritem">
-                                        <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                        <flag>wxEXPAND</flag>
                                         <border>0</border>
-                                        <option>0</option>
-                                        <object class="wxStaticText" name="labelSlowFastZoomRate" base="EditStaticText">
-                                            <attribute>1</attribute>
-                                            <label>(fast)</label>
+                                        <option>1</option>
+                                        <object class="wxBoxSizer" name="sizer_6_copy" base="EditBoxSizer">
+                                            <orient>wxHORIZONTAL</orient>
+                                            <object class="sizeritem">
+                                                <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="wxStaticText" name="lblZoomSpeed" base="EditStaticText">
+                                                    <style>wxALIGN_CENTRE</style>
+                                                    <attribute>1</attribute>
+                                                    <label>Zoom Rate</label>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="spacer" name="spacer" base="EditSpacer">
+                                                    <height>20</height>
+                                                    <width>20</width>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="wxStaticText" name="labelSlowCamZoomRate" base="EditStaticText">
+                                                    <attribute>1</attribute>
+                                                    <label>(slow)</label>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxEXPAND|wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>1</option>
+                                                <object class="wxSlider" name="sliderCamZoomRate" base="EditSlider">
+                                                    <style>wxSL_HORIZONTAL</style>
+                                                    <tooltip>Camera zooming rate.</tooltip>
+                                                    <id>ID_MOUSE_ZOOM_SLIDER</id>
+                                                    <range>1, 100</range>
+                                                    <value>1</value>
+                                                    <events>
+                                                        <handler event="EVT_COMMAND_SCROLL">OnMouseZoomSlider</handler>
+                                                    </events>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                                <border>0</border>
+                                                <option>0</option>
+                                                <object class="wxStaticText" name="labelSlowFastZoomRate" base="EditStaticText">
+                                                    <attribute>1</attribute>
+                                                    <label>(fast)</label>
+                                                    <id>ID_MOUSE_ZOOM_SLIDER</id>
+                                                </object>
+                                            </object>
                                         </object>
                                     </object>
                                 </object>
diff --git a/src/gui/glade-skeleton/rangeDialog.wxg b/src/gui/glade-skeleton/rangeDialog.wxg
new file mode 100644
index 0000000..b7d090d
--- /dev/null
+++ b/src/gui/glade-skeleton/rangeDialog.wxg
@@ -0,0 +1,273 @@
+<?xml version="1.0"?>
+<!-- generated by wxGlade 0.6.8 on Sun Oct 27 18:17:58 2013 -->
+
+<application path="/home/pcuser/code/3Depict/src/gui/dialogs/rangeEditDialog-mod.h" name="" class="" option="0" language="C++" top_window="DlgRanging" encoding="UTF-8" use_gettext="1" overwrite="1" use_new_namespace="1" for_version="2.8" is_template="0" indent_amount="4" indent_symbol="space" source_extension=".cpp" header_extension=".h">
+    <object class="RangeEditorDialog" name="DlgRanging" base="EditDialog">
+        <extracode>enum\n{\n ID_CHECK_SHOW_OVERLAY=wxID_ANY+1,\n ID_SPLIT_LEFTRIGHT,\n ID_GRID_RANGES,\n ID_BTN_RANGE_ADD,\n ID_BTN_RANGE_REMOVE,\n ID_COMBO_OVERLAY_MANAGE_SET,\n ID_COMBO_SIMPLE_OVERLAY,\n ID_LIST_MANAGE_SET_ENTRIES,\n ID_LIST_MANAGE_SET_VALUES,\n ID_LIST_OVERLAY_COMBINED,\n ID_LIST_OVERLAY_COMBINED_CMPNT,\n ID_LIST_OVERLAY_COMBINED_SELECTION,\n ID_LIST_OVERLAY_SIMPLE,\n ID_LIST_OVERLAY_SIMPLE_CMPNT,\n ID_LIST_PLOTS,\n ID_MANAGE_SET_MORE,\n ID_PLOT_AREA,\n ID_TEXT_FILTER [...]
+        <style>wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxTHICK_FRAME</style>
+        <title>Range Editor</title>
+        <object class="wxBoxSizer" name="topSizer" base="EditBoxSizer">
+            <orient>wxHORIZONTAL</orient>
+            <object class="sizeritem">
+                <flag>wxEXPAND</flag>
+                <border>0</border>
+                <option>1</option>
+                <object class="wxSplitterWindow" name="splitVertical" base="EditSplitterWindow">
+                    <style>wxSP_3D|wxSP_BORDER</style>
+                    <orientation>wxSPLIT_VERTICAL</orientation>
+                    <id>ID_SPLIT_LEFTRIGHT</id>
+                    <window_2>panelSplitRight</window_2>
+                    <window_1>panelSplitLeft</window_1>
+                    <events>
+                        <handler event="EVT_SPLITTER_UNSPLIT">OnSashVerticalUnsplit</handler>
+                    </events>
+                    <object class="wxPanel" name="panelSplitLeft" base="EditPanel">
+                        <style>wxTAB_TRAVERSAL</style>
+                        <object class="wxBoxSizer" name="sizerNote" base="EditBoxSizer">
+                            <orient>wxHORIZONTAL</orient>
+                            <object class="sizeritem">
+                                <flag>wxEXPAND</flag>
+                                <border>0</border>
+                                <option>1</option>
+                                <object class="wxNotebook" name="notebookLeft" base="EditNotebook">
+                                    <style>wxNB_LEFT</style>
+                                    <tabs>
+                                        <tab window="noteLeftPlots">Plots</tab>
+                                        <tab window="noteLeftRanges">Ranges</tab>
+                                        <tab window="noteLeftOverlay">Overlay</tab>
+                                    </tabs>
+                                    <custom_base>ID_NOTE_TOOL</custom_base>
+                                    <object class="wxPanel" name="noteLeftPlots" base="EditPanel">
+                                        <style>wxTAB_TRAVERSAL</style>
+                                        <object class="wxBoxSizer" name="sizerPlotList" base="EditBoxSizer">
+                                            <orient>wxVERTICAL</orient>
+                                            <object class="sizeritem">
+                                                <flag>wxEXPAND</flag>
+                                                <border>0</border>
+                                                <option>1</option>
+                                                <object class="wxListBox" name="listPlots" base="EditListBox">
+                                                    <style>wxLB_MULTIPLE</style>
+                                                    <selection>0</selection>
+                                                    <id>ID_LIST_PLOTS</id>
+                                                    <choices>
+                                                    </choices>
+                                                    <events>
+                                                        <handler event="EVT_LISTBOX">OnListPlots</handler>
+                                                    </events>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxALL|wxALIGN_RIGHT</flag>
+                                                <border>5</border>
+                                                <option>0</option>
+                                                <object class="wxCheckBox" name="checkSpectrumOnly" base="EditCheckBox">
+                                                    <checked>1</checked>
+                                                    <label>Only Spectra Plots</label>
+                                                    <events>
+                                                        <handler event="EVT_CHECKBOX">OnCheckSpectrumOnly</handler>
+                                                    </events>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                    <object class="wxPanel" name="noteLeftRanges" base="EditPanel">
+                                        <style>wxTAB_TRAVERSAL</style>
+                                        <object class="wxBoxSizer" name="sizerRanges" base="EditBoxSizer">
+                                            <orient>wxVERTICAL</orient>
+                                            <object class="sizeritem">
+                                                <flag>wxALL|wxEXPAND</flag>
+                                                <border>4</border>
+                                                <option>1</option>
+                                                <object class="wxGrid" name="gridRanges" base="EditGrid">
+                                                    <id>ID_GRID_RANGES</id>
+                                                    <create_grid>1</create_grid>
+                                                    <enable_editing>1</enable_editing>
+                                                    <enable_grid_lines>1</enable_grid_lines>
+                                                    <rows_number>10</rows_number>
+                                                    <enable_col_resize>1</enable_col_resize>
+                                                    <enable_row_resize>1</enable_row_resize>
+                                                    <enable_grid_resize>1</enable_grid_resize>
+                                                    <selection_mode>wxGrid.wxGridSelectCells</selection_mode>
+                                                    <columns>
+                                                        <column size="-1">A</column>
+                                                        <column size="-1">B</column>
+                                                        <column size="-1">C</column>
+                                                    </columns>
+                                                    <events>
+                                                        <handler event="EVT_GRID_CMD_CELL_CHANGE">OnGridRangesCellChange</handler>
+                                                    </events>
+                                                </object>
+                                            </object>
+                                            <object class="sizeritem">
+                                                <flag>wxALL|wxEXPAND</flag>
+                                                <border>4</border>
+                                                <option>0</option>
+                                                <object class="wxBoxSizer" name="sizerRangeBottom" base="EditBoxSizer">
+                                                    <orient>wxHORIZONTAL</orient>
+                                                    <object class="sizeritem">
+                                                        <border>0</border>
+                                                        <option>1</option>
+                                                        <object class="spacer" name="spacer" base="EditSpacer">
+                                                            <height>20</height>
+                                                            <width>20</width>
+                                                        </object>
+                                                    </object>
+                                                    <object class="sizeritem">
+                                                        <flag>wxALL</flag>
+                                                        <border>4</border>
+                                                        <option>0</option>
+                                                        <object class="wxButton" name="btnRangeAdd" base="EditButton">
+                                                            <stockitem>ADD</stockitem>
+                                                            <label>Add</label>
+                                                            <id>ID_BTN_RANGE_ADD</id>
+                                                            <events>
+                                                                <handler event="EVT_BUTTON">OnBtnRangeAdd</handler>
+                                                            </events>
+                                                        </object>
+                                                    </object>
+                                                    <object class="sizeritem">
+                                                        <flag>wxALL</flag>
+                                                        <border>4</border>
+                                                        <option>0</option>
+                                                        <object class="wxButton" name="btnRangeRemove" base="EditButton">
+                                                            <stockitem>REMOVE</stockitem>
+                                                            <label>Remove</label>
+                                                            <id>ID_BTN_RANGE_REMOVE</id>
+                                                            <events>
+                                                                <handler event="EVT_BUTTON">OnBtnRangeRemove</handler>
+                                                            </events>
+                                                        </object>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                    <object class="wxPanel" name="noteLeftOverlay" base="EditPanel">
+                                        <style>wxTAB_TRAVERSAL</style>
+                                        <object class="wxBoxSizer" name="sizerOverlayPane" base="EditBoxSizer">
+                                            <orient>wxVERTICAL</orient>
+                                            <object class="sizeritem">
+                                                <flag>wxEXPAND</flag>
+                                                <border>0</border>
+                                                <option>1</option>
+                                                <object class="wxBoxSizer" name="sizerOverlaySimple" base="EditBoxSizer">
+                                                    <orient>wxVERTICAL</orient>
+                                                    <object class="sizeritem">
+                                                        <flag>wxALL</flag>
+                                                        <border>5</border>
+                                                        <option>0</option>
+                                                        <object class="wxCheckBox" name="checkShowOverlay" base="EditCheckBox">
+                                                            <label>Show Overlays</label>
+                                                            <id>ID_CHECK_SHOW_OVERLAY</id>
+                                                            <events>
+                                                                <handler event="EVT_CHECKBOX">OnCheckShowOvelay</handler>
+                                                            </events>
+                                                        </object>
+                                                    </object>
+                                                    <object class="sizeritem">
+                                                        <flag>wxEXPAND</flag>
+                                                        <border>0</border>
+                                                        <option>1</option>
+                                                        <object class="wxBoxSizer" name="sizerOverlaySimpleContainer" base="EditBoxSizer">
+                                                            <orient>wxVERTICAL</orient>
+                                                            <object class="sizeritem">
+                                                                <flag>wxALL|wxEXPAND</flag>
+                                                                <border>2</border>
+                                                                <option>0</option>
+                                                                <object class="wxBoxSizer" name="sizerOverlaySimpleLeft" base="EditBoxSizer">
+                                                                    <orient>wxVERTICAL</orient>
+                                                                    <object class="sizeritem">
+                                                                        <flag>wxEXPAND</flag>
+                                                                        <border>0</border>
+                                                                        <option>0</option>
+                                                                        <object class="wxTextCtrl" name="textFilterSimpleCmpnt" base="EditTextCtrl">
+                                                                            <id>ID_TEXT_FILTER_SIMPLE_CMPNT</id>
+                                                                            <events>
+                                                                                <handler event="EVT_TEXT">OnTextFilterSimple</handler>
+                                                                            </events>
+                                                                        </object>
+                                                                    </object>
+                                                                </object>
+                                                            </object>
+                                                            <object class="sizeritem">
+                                                                <flag>wxEXPAND</flag>
+                                                                <border>0</border>
+                                                                <option>1</option>
+                                                                <object class="wxListCtrl" name="listOverlaySimple" base="EditListCtrl">
+                                                                    <style>wxLC_REPORT|wxSUNKEN_BORDER</style>
+                                                                    <id>ID_LIST_OVERLAY_SIMPLE</id>
+                                                                    <events>
+                                                                        <handler event="EVT_LIST_DELETE_ITEM">OnListOverlaySimpleDelete</handler>
+                                                                    </events>
+                                                                </object>
+                                                            </object>
+                                                        </object>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                    <object class="wxPanel" name="panelSplitRight" base="EditPanel">
+                        <style>wxTAB_TRAVERSAL</style>
+                        <object class="wxBoxSizer" name="sizerRight" base="EditBoxSizer">
+                            <orient>wxVERTICAL</orient>
+                            <object class="sizeritem">
+                                <flag>wxEXPAND</flag>
+                                <border>0</border>
+                                <option>1</option>
+                                <object class="wxPanel" name="plotPanel" base="EditPanel">
+                                    <style>wxTAB_TRAVERSAL</style>
+                                    <id>ID_PLOT_AREA</id>
+                                </object>
+                            </object>
+                            <object class="sizeritem">
+                                <flag>wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL</flag>
+                                <border>4</border>
+                                <option>0</option>
+                                <object class="wxBoxSizer" name="sizerBottom" base="EditBoxSizer">
+                                    <orient>wxHORIZONTAL</orient>
+                                    <object class="sizeritem">
+                                        <border>0</border>
+                                        <option>1</option>
+                                        <object class="spacer" name="spacer" base="EditSpacer">
+                                            <height>20</height>
+                                            <width>20</width>
+                                        </object>
+                                    </object>
+                                    <object class="sizeritem">
+                                        <flag>wxALL</flag>
+                                        <border>4</border>
+                                        <option>0</option>
+                                        <object class="wxButton" name="btnOK" base="EditButton">
+                                            <stockitem>OK</stockitem>
+                                            <label>&OK</label>
+                                            <events>
+                                                <handler event="EVT_BUTTON">OnBtnOK</handler>
+                                            </events>
+                                        </object>
+                                    </object>
+                                    <object class="sizeritem">
+                                        <flag>wxALL</flag>
+                                        <border>4</border>
+                                        <option>0</option>
+                                        <object class="wxButton" name="btnCancel" base="EditButton">
+                                            <stockitem>CANCEL</stockitem>
+                                            <label>&Cancel</label>
+                                            <events>
+                                                <handler event="EVT_BUTTON">OnBtnCancel</handler>
+                                            </events>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+    </object>
+</application>
diff --git a/src/gui/glade-skeleton/resDialog.wxg b/src/gui/glade-skeleton/resDialog.wxg
old mode 100644
new mode 100755
diff --git a/src/gui/mainFrame.cpp b/src/gui/mainFrame.cpp
index caa65bd..82c5c03 100644
--- a/src/gui/mainFrame.cpp
+++ b/src/gui/mainFrame.cpp
@@ -30,6 +30,7 @@ enum
 #include <wx/dir.h>
 #include <wx/imaglist.h>
 #include <wx/stdpaths.h>
+#include <wx/tipdlg.h>
 
 #if wxCHECK_VERSION(2, 9, 0)
 	#include <wx/utils.h>  // Needed for wxLaunchDefaultApplication
@@ -46,6 +47,7 @@ enum
 #include "gui/dialogs/autosaveDialog.h" // startup autosave dialog for multiple load options
 #include "gui/dialogs/filterErrorDialog.h" // Dialog for displaying details for filter analysis error messages
 #include "gui/dialogs/animateFilterDialog.h" // Dialog for performing property sweeps on filters
+#include "gui/dialogs/rangeEditDialog.h" // Dialog for performing editing rangefiles
 
 #include "common/stringFuncs.h"
 
@@ -160,6 +162,7 @@ enum {
     //Edit menu
     ID_EDIT_UNDO,
     ID_EDIT_REDO,
+    ID_EDIT_RANGE,
     ID_EDIT_PREFERENCES,
 
     //Help menu
@@ -343,6 +346,7 @@ MainWindowFrame::MainWindowFrame(wxWindow* parent, int id, const wxString& title
     wxFrame(parent, id, title, pos, size, style)
 {
 	initedOK=false;
+	plotUpdates=false;
 	programmaticEvent=false;
 	fullscreenState=0;
 	verCheckThread=0;
@@ -356,7 +360,8 @@ MainWindowFrame::MainWindowFrame(wxWindow* parent, int id, const wxString& title
 	//Set up the drag and drop handler
 	dropTarget = new FileDropTarget(this);
 	SetDropTarget(dropTarget);
-	
+
+
 	//Set up the recently used files menu
 	// Note that this cannot exceed 9. Items show up, but do not trigger events.
 	// This is bug 12141 in wxWidgets : http://trac.wxwidgets.org/ticket/12141
@@ -469,7 +474,7 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     wxglade_tmp_menu_1->AppendSeparator(); //Separator
 #ifndef __APPLE__
     checkMenuControlPane= wxglade_tmp_menu_1->Append(ID_VIEW_CONTROL_PANE, 
-		    wxTRANS("&Control Pane\tF3"), wxTRANS("Toggle left control pane"), wxITEM_CHECK);
+		    wxTRANS("&Control Pane\tF2"), wxTRANS("Toggle left control pane"), wxITEM_CHECK);
 #else
     checkMenuControlPane= wxglade_tmp_menu_1->Append(ID_VIEW_CONTROL_PANE, 
 		    wxTRANS("&Control Pane\tAlt+C"), wxTRANS("Toggle left control pane"), wxITEM_CHECK);
@@ -478,14 +483,14 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     checkMenuControlPane->Check();
 #ifndef __APPLE__
     checkMenuRawDataPane= wxglade_tmp_menu_1->Append(ID_VIEW_RAW_DATA_PANE, 
-		    wxTRANS("&Raw Data Pane\tF4"), wxTRANS("Toggle raw data  pane (bottom)"), wxITEM_CHECK);
+		    wxTRANS("&Raw Data Pane\tF3"), wxTRANS("Toggle raw data  pane (bottom)"), wxITEM_CHECK);
 #else
     checkMenuRawDataPane= wxglade_tmp_menu_1->Append(ID_VIEW_RAW_DATA_PANE, 
 		    wxTRANS("&Raw Data Pane\tAlt+R"), wxTRANS("Toggle raw data  pane (bottom)"), wxITEM_CHECK);
 #endif
     checkMenuRawDataPane->Check();
 #ifndef __APPLE__
-    checkMenuSpectraList=wxglade_tmp_menu_1->Append(ID_VIEW_SPECTRA, wxTRANS("&Plot List\tF5"),wxTRANS("Toggle plot list"), wxITEM_CHECK);
+    checkMenuSpectraList=wxglade_tmp_menu_1->Append(ID_VIEW_SPECTRA, wxTRANS("&Plot List\tF4"),wxTRANS("Toggle plot list"), wxITEM_CHECK);
 #else
     checkMenuSpectraList=wxglade_tmp_menu_1->Append(ID_VIEW_SPECTRA, wxTRANS("&Plot List\tAlt+P"),wxTRANS("Toggle plot list"), wxITEM_CHECK);
 #endif
@@ -513,6 +518,9 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     editRedoMenuItem = Edit->Append(ID_EDIT_REDO,wxTRANS("&Redo\tCtrl+Y"));
    editRedoMenuItem->Enable(false);
     Edit->AppendSeparator();
+    editRangeMenuItem=Edit->Append(ID_EDIT_RANGE,wxTRANS("&Range"));
+    editRangeMenuItem->Enable(false);
+    Edit->AppendSeparator();
     Edit->Append(ID_EDIT_PREFERENCES,wxTRANS("&Preferences"));
 
     MainFrame_Menu->Append(Edit, wxTRANS("&Edit"));
@@ -564,12 +572,12 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     btnFilterTreeErrs = new wxBitmapButton(filterTreePane,ID_BTN_FILTERTREE_ERRS,wxArtProvider::GetBitmap(wxART_INFORMATION),wxDefaultPosition,wxSize(40,40));
 
     propGridLabel = new wxStaticText(filterPropertyPane, wxID_ANY, wxTRANS("Filter settings"));
-    gridFilterPropGroup = new wxPropertyGrid(filterPropertyPane, ID_GRID_FILTER_PROPERTY);
+    gridFilterPropGroup = new wxCustomPropGrid(filterPropertyPane, ID_GRID_FILTER_PROPERTY);
     labelCameraName = new wxStaticText(noteCamera, wxID_ANY, wxTRANS("Camera Name"));
     comboCamera = new wxComboBox(noteCamera, ID_COMBO_CAMERA, wxT(""), wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN|wxTE_PROCESS_ENTER );
     buttonRemoveCam = new wxButton(noteCamera, wxID_REMOVE, wxEmptyString);
     cameraNamePropertySepStaticLine = new wxStaticLine(noteCamera, wxID_ANY);
-    gridCameraProperties = new wxPropertyGrid(noteCamera, ID_GRID_CAMERA_PROPERTY);
+    gridCameraProperties = new wxCustomPropGrid(noteCamera, ID_GRID_CAMERA_PROPERTY);
 #ifndef APPLE_EFFECTS_WORKAROUND
     checkPostProcessing = new wxCheckBox(notePost, ID_EFFECT_ENABLE, wxTRANS("3D Post-processing"));
 #endif
@@ -615,7 +623,7 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     bitmapFxStereoGlasses = new wxStaticBitmap(noteFxPanelStereo, wxID_ANY, wxNullBitmap);
     labelFxStereoBaseline = new wxStaticText(noteFxPanelStereo, wxID_ANY, wxTRANS("Baseline Separation"));
     sliderFxStereoBaseline = new wxSlider(noteFxPanelStereo,ID_EFFECT_STEREO_BASELINE_SLIDER, 20, 0, 100);
-    labelAppearance = new wxStaticText(noteTools, wxID_ANY, _("Appearance"));
+    labelAppearance = new wxStaticText(noteTools, wxID_ANY, wxTRANS("Appearance"));
     checkAlphaBlend = new wxCheckBox(noteTools,ID_CHECK_ALPHA , wxTRANS("Smooth && translucent objects"));
     checkAlphaBlend->SetValue(true);
     checkLighting = new wxCheckBox(noteTools, ID_CHECK_LIGHTING, wxTRANS("3D lighting"));
@@ -692,6 +700,10 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     listLastRefresh->InsertColumn(0,wxTRANS("Type"));
     listLastRefresh->InsertColumn(1,wxTRANS("Num"));
 
+    //Set callback for mathgl plot
+    panelSpectra->registerUpdateHandler(this,
+		    (UpdateHandler)&MainWindowFrame::onPanelSpectraUpdate);
+
     //Inform top panel about timer and timeouts
     panelTop->setParentStatus(MainFrame_statusbar,statusTimer,STATUS_TIMER_DELAY);
 
@@ -709,8 +721,6 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
     else
 	    restoreConfigDefaults();
 	
-	//Try to set the window size to a nice size
-	SetSize(getNiceWindowSize());
 	
 	
 	//Attempt to load the auto-save file, if it exists
@@ -718,10 +728,15 @@ TRANS("Unable to initialise the openGL (3D) panel. Program cannot start. Please
 	checkReloadAutosave();
 	//-----------------
 
+	//Try to set the window size to a nice size
+	SetSize(getNiceWindowSize());
 
 	initedOK=true;   
 
 
+
+
+
 	updateTimer->Start(UPDATE_TIMER_DELAY,wxTIMER_CONTINUOUS);
 	autoSaveTimer->Start(AUTOSAVE_DELAY*1000,wxTIMER_CONTINUOUS);
 
@@ -779,6 +794,7 @@ MainWindowFrame::~MainWindowFrame()
     comboCamera->Unbind(wxEVT_SET_FOCUS, &MainWindowFrame::OnComboCameraSetFocus, this);
     comboStash->Unbind(wxEVT_SET_FOCUS, &MainWindowFrame::OnComboStashSetFocus, this);
     noteDataView->Unbind(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, &MainWindowFrame::OnNoteDataView, this);
+    treeFilters->Unbind(wxEVT_KEY_DOWN,&MainWindowFrame::OnTreeKeyDown,this);
 #else
 	noteDataView->Disconnect();
 	comboStash->Disconnect();
@@ -819,6 +835,7 @@ BEGIN_EVENT_TABLE(MainWindowFrame, wxFrame)
 
     EVT_MENU(ID_EDIT_UNDO, MainWindowFrame::OnEditUndo)
     EVT_MENU(ID_EDIT_REDO, MainWindowFrame::OnEditRedo)
+    EVT_MENU(ID_EDIT_RANGE, MainWindowFrame::OnEditRange)
     EVT_MENU(ID_EDIT_PREFERENCES, MainWindowFrame::OnEditPreferences)
     
     EVT_MENU(ID_VIEW_BACKGROUND, MainWindowFrame::OnViewBackground)
@@ -841,15 +858,23 @@ BEGIN_EVENT_TABLE(MainWindowFrame, wxFrame)
     EVT_TEXT_ENTER(ID_COMBO_STASH, MainWindowFrame::OnComboStashEnter)
     EVT_COMBOBOX(ID_COMBO_STASH, MainWindowFrame::OnComboStash)
     EVT_TREE_END_DRAG(ID_TREE_FILTERS, MainWindowFrame::OnTreeEndDrag)
+#if !defined(WX_TREE_WORKAROUND)
     EVT_TREE_KEY_DOWN(ID_TREE_FILTERS, MainWindowFrame::OnTreeKeyDown)
+#endif
+    EVT_TREE_SEL_CHANGING(ID_TREE_FILTERS, MainWindowFrame::OnTreeSelectionPreChange)
     EVT_TREE_SEL_CHANGED(ID_TREE_FILTERS, MainWindowFrame::OnTreeSelectionChange)
     EVT_TREE_DELETE_ITEM(ID_TREE_FILTERS, MainWindowFrame::OnTreeDeleteItem)
     EVT_TREE_BEGIN_DRAG(ID_TREE_FILTERS, MainWindowFrame::OnTreeBeginDrag)
     EVT_BUTTON(ID_BTN_EXPAND, MainWindowFrame::OnBtnExpandTree)
     EVT_BUTTON(ID_BTN_COLLAPSE, MainWindowFrame::OnBtnCollapseTree)
     EVT_BUTTON(ID_BTN_FILTERTREE_ERRS, MainWindowFrame::OnBtnFilterTreeErrs)
+#if wxCHECK_VERSION(2,9,0)
+    EVT_GRID_CMD_CELL_CHANGED(ID_GRID_FILTER_PROPERTY, MainWindowFrame::OnGridFilterPropertyChange)
+    EVT_GRID_CMD_CELL_CHANGED(ID_GRID_CAMERA_PROPERTY, MainWindowFrame::OnGridCameraPropertyChange)
+#else
     EVT_GRID_CMD_CELL_CHANGE(ID_GRID_FILTER_PROPERTY, MainWindowFrame::OnGridFilterPropertyChange)
     EVT_GRID_CMD_CELL_CHANGE(ID_GRID_CAMERA_PROPERTY, MainWindowFrame::OnGridCameraPropertyChange)
+#endif
     EVT_TEXT(ID_COMBO_CAMERA, MainWindowFrame::OnComboCameraText)
     EVT_TEXT_ENTER(ID_COMBO_CAMERA, MainWindowFrame::OnComboCameraEnter)
     EVT_CHECKBOX(ID_CHECK_ALPHA, MainWindowFrame::OnCheckAlpha)
@@ -936,13 +961,13 @@ void MainWindowFrame::checkAskSaveState()
 
 	if(visControl.hasStateData() && visControl.stateModifyLevel() >=STATE_MODIFIED_ANCILLARY)
 	{
-		wxMessageDialog *wxD  =new wxMessageDialog(this,
+		wxMessageDialog wxD (this,
 			wxTRANS("Current state has not been saved, would you like to save it now?")
 			,wxTRANS("State changed"),wxYES_NO|wxICON_QUESTION|wxYES_DEFAULT );
-		wxD->SetAffirmativeId(wxID_YES);
-		wxD->SetEscapeId(wxID_NO);
+		wxD.SetAffirmativeId(wxID_YES);
+		wxD.SetEscapeId(wxID_NO);
 
-		if ( wxD->ShowModal()== wxID_YES) 
+		if ( wxD.ShowModal()== wxID_YES) 
 		{
 			wxCommandEvent event;
 			OnFileSave(event);
@@ -960,16 +985,16 @@ void MainWindowFrame::OnFileOpen(wxCommandEvent &event)
 
 
 	//Load a file, either a state file, or a new pos file
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Select Data or State File..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Select Data or State File..."), wxT(""),
 		wxT(""),wxTRANS("Readable files (*.xml, *.pos, *.txt,*.csv)|*.xml;*.pos;*.txt;*.csv|POS File (*.pos)|*.pos|XML State File (*.xml)|*.xml|Text Data Files (*.txt/csv)|*.txt;*.csv|All Files (*)|*"),wxFD_OPEN|wxFD_FILE_MUST_EXIST);
 
 	//Show the file dialog	
-	if( (wxF->ShowModal() == wxID_CANCEL))
+	if( (wxF.ShowModal() == wxID_CANCEL))
 		return;
 
 	//See if the user would like to save state, if we are opening a state file
 	// which will overwrite our current state
-	std::string filePath = stlStr(wxF->GetPath());
+	std::string filePath = stlStr(wxF.GetPath());
 	if(guessFileType(filePath) == FILE_TYPE_XML)
 		checkAskSaveState();
 		
@@ -984,7 +1009,7 @@ void MainWindowFrame::OnFileOpen(wxCommandEvent &event)
 		visControl.setWxTreeFilterViewPersistence(filterId);
 	
 	//Load the file
-	if(!loadFile(wxF->GetPath()))
+	if(!loadFile(wxF.GetPath()))
 	{
 		visControl.clearTreeFilterViewPersistence();
 		return;
@@ -992,10 +1017,10 @@ void MainWindowFrame::OnFileOpen(wxCommandEvent &event)
 
 
 	std::string tmp;
-	tmp = stlStr(wxF->GetPath());
+	tmp = stlStr(wxF.GetPath());
 	configFile.addRecentFile(tmp);
 	//Update the "recent files" menu
-	recentHistory->AddFileToHistory(wxF->GetPath());
+	recentHistory->AddFileToHistory(wxF.GetPath());
 
 	//If we are using the default camera,
 	//move it to make sure that it is visible
@@ -1004,9 +1029,7 @@ void MainWindowFrame::OnFileOpen(wxCommandEvent &event)
 
 	statusMessage(TRANS("Loaded file."),MESSAGE_INFO);
 
-	panelTop->Refresh();
-	
-	wxF->Destroy();
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::OnFileMerge(wxCommandEvent &event)
@@ -1016,25 +1039,23 @@ void MainWindowFrame::OnFileMerge(wxCommandEvent &event)
 		return;
 
 	//Load a file, either a state file, or a new pos file, or text file
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Select Data or State File..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Select Data or State File..."), wxT(""),
 		wxT(""),wxTRANS("3Depict file (*.xml, *.pos,*.txt)|*.xml;*.pos;*.txt|POS File (*.pos)|*.pos|XML State File (*.xml)|*.xml|All Files (*)|*"),wxFD_OPEN|wxFD_FILE_MUST_EXIST);
 
 	//Show the file dialog	
-	if( (wxF->ShowModal() == wxID_CANCEL))
+	if( (wxF.ShowModal() == wxID_CANCEL))
 		return;
 
 	textConsoleOut->Clear();
 	//Load the file
-	if(!loadFile(wxF->GetPath(),true))
+	if(!loadFile(wxF.GetPath(),true))
 		return;
 
 	statusMessage(TRANS("Merged file."),MESSAGE_INFO);
 
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 
 	setSaveStatus();
-	
-	wxF->Destroy();
 }
 
 void MainWindowFrame::OnDropFiles(const wxArrayString &files, int x, int y)
@@ -1147,7 +1168,7 @@ void MainWindowFrame::OnDropFiles(const wxArrayString &files, int x, int y)
 	}
 }
 
-bool MainWindowFrame::loadFile(const wxString &fileStr, bool merge)
+bool MainWindowFrame::loadFile(const wxString &fileStr, bool merge,bool noUpdate)
 {
 	//Don't try to alter viscontrol if we are refreshing. That would be bad.
 	ASSERT(!visControl.isRefreshing());
@@ -1179,14 +1200,14 @@ bool MainWindowFrame::loadFile(const wxString &fileStr, bool merge)
 
 		if(visControl.hasHazardousContents())
 		{
-			wxMessageDialog *wxD  =new wxMessageDialog(this,
+			wxMessageDialog wxD(this,
 						wxTRANS("This state file contains filters that can be unsafe to run\nDo you wish to remove these before continuing?.") 
 						,wxTRANS("Security warning"),wxYES_NO|wxICON_WARNING|wxYES_DEFAULT );
 
-			wxD->SetAffirmativeId(wxID_YES);
-			wxD->SetEscapeId(wxID_NO);
+			wxD.SetAffirmativeId(wxID_YES);
+			wxD.SetEscapeId(wxID_NO);
 
-			if(wxD->ShowModal()!= wxID_NO)
+			if(wxD.ShowModal()!= wxID_NO)
 				visControl.stripHazardousContents();
 
 		}
@@ -1297,7 +1318,9 @@ bool MainWindowFrame::loadFile(const wxString &fileStr, bool merge)
 	}	
 
 	visControl.updateWxTreeCtrl(treeFilters);
-	doSceneUpdate();
+
+	if(!noUpdate)
+		doSceneUpdate();
 
 	return true;
 }	
@@ -1334,7 +1357,7 @@ void MainWindowFrame::OnRecentFile(wxCommandEvent &event)
 			{
 				if(loadOK)
 					statusMessage(TRANS("Loaded file."),MESSAGE_INFO);
-				panelTop->Refresh();
+				panelTop->forceRedraw();
 			}
 		}
 		
@@ -1395,13 +1418,13 @@ void MainWindowFrame::OnFileExportPlot(wxCommandEvent &event)
 		return;
 	}
 
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Save plot..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Save plot..."), wxT(""),
 		wxT(""),wxTRANS("By Extension (svg,png)|*.svg;*.png|Scalable Vector Graphics File (*.svg)|*.svg|PNG File (*.png)|*.png|All Files (*)|*"),wxFD_SAVE);
 
-	if( (wxF->ShowModal() == wxID_CANCEL))
+	if( wxF.ShowModal() == wxID_CANCEL)
 		return;
 
-	std::string dataFile = stlStr(wxF->GetPath());
+	std::string dataFile = stlStr(wxF.GetPath());
 	
 	//Split the filename into chunks: path, volume, name and extension
 	//the format of this is OS dependant, but wxWidgets can deal with this.
@@ -1410,13 +1433,13 @@ void MainWindowFrame::OnFileExportPlot(wxCommandEvent &event)
 	wxFileName fname;
 	wxString volume,path,name,ext;
 	bool hasExt;
-	fname.SplitPath(wxF->GetPath(),&volume,
+	fname.SplitPath(wxF.GetPath(),&volume,
 			&path,&name,&ext, &hasExt);
 	
 
 	strExt=stlStr(ext);
 	strExt = lowercase(strExt);
-	wxF->Destroy();
+	
 	}
 
 	unsigned int errCode;
@@ -1436,7 +1459,7 @@ void MainWindowFrame::OnFileExportPlot(wxCommandEvent &event)
 		if(strExt == extensions[ui])
 		{
 			extId=ui;
-			return;
+			break;
 		}
 	}
 
@@ -1450,21 +1473,18 @@ void MainWindowFrame::OnFileExportPlot(wxCommandEvent &event)
 			wxStrs.Add(wxCStr(descriptions[ui]));
 
 
-		cerr << "wxstrs has :" << wxStrs.GetCount() << " items" << std::endl;
-		wxSingleChoiceDialog  *wxD = new wxSingleChoiceDialog(this,
-			wxTRANS("Select type for save"),wxTRANS("Choose file type"),wxStrs);
+		wxSingleChoiceDialog  wxD(this,wxTRANS("Select type for save"),
+						wxTRANS("Choose file type"),wxStrs);
 
-		if(wxD->ShowModal() == wxID_CANCEL)
-		{
-			delete wxD;
+		if(wxD.ShowModal() == wxID_CANCEL)
 			return;
-		}
 
-		strExt=extensions[wxD->GetSelection()];
+		strExt=extensions[wxD.GetSelection()];
 
 		//Update the filename extension to use
 		dataFile+=".";
 		dataFile+=strExt;
+
 	}
 	
 	
@@ -1508,13 +1528,13 @@ void MainWindowFrame::OnFileExportPlot(wxCommandEvent &event)
 
 void MainWindowFrame::OnFileExportImage(wxCommandEvent &event)
 {
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Save Image..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Save Image..."), wxT(""),
 		wxT(""),wxTRANS("PNG File (*.png)|*.png|All Files (*)|*"),wxFD_SAVE);
 
-	if( (wxF->ShowModal() == wxID_CANCEL))
+	if( (wxF.ShowModal() == wxID_CANCEL))
 		return;
 
-	std::string dataFile = stlStr(wxF->GetPath());
+	std::string dataFile = stlStr(wxF.GetPath());
 	
 	//Show a resolution chooser dialog
 	ResolutionDialog d(this,wxID_ANY,wxTRANS("Choose resolution"));
@@ -1528,16 +1548,6 @@ void MainWindowFrame::OnFileExportImage(wxCommandEvent &event)
 	if(d.ShowModal() == wxID_CANCEL)
 		return;
 
-	//TODO: Fix this limitation!
-	if((d.getWidth() < w && d.getHeight() > h) ||
-		(d.getWidth() > w && d.getHeight() < h))
-	{
-		wxErrMsg(this,TRANS("Program limitation"),
-				TRANS("Limitation on the screenshot dimension; please ensure that both width and height exceed the initial values,\n or that they are both smaller than the initial values.\n If this bothers you, please submit a bug."));
-		return;
-	}
-
-
 	bool saveOK=panelTop->saveImage(d.getWidth(),d.getHeight(),dataFile.c_str());
 
 	if(!saveOK)
@@ -1556,12 +1566,11 @@ void MainWindowFrame::OnFileExportImage(wxCommandEvent &event)
 
 void MainWindowFrame::OnFileExportVideo(wxCommandEvent &event)
 {
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Save Image..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Save Image..."), wxT(""),
 		wxT(""),wxTRANS("PNG File (*.png)|*.png|All Files (*)|*"),wxFD_SAVE);
 
-	if( (wxF->ShowModal() == wxID_CANCEL))
+	if( (wxF.ShowModal() == wxID_CANCEL))
 		return;
-
 	
 	//Show a resolution chooser dialog
 	ResolutionDialog d(this,wxID_ANY,wxTRANS("Choose resolution"));
@@ -1573,16 +1582,14 @@ void MainWindowFrame::OnFileExportVideo(wxCommandEvent &event)
 
 	//Show dialog, skip save if user cancels dialo
 	if(d.ShowModal() == wxID_CANCEL)
-	{
-		wxF->Destroy();
 		return;
-	}
 
 	if((d.getWidth() < w && d.getHeight() > h) ||
 		(d.getWidth() > w && d.getHeight() < h) )
 	{
 		wxErrMsg(this, TRANS("Program limitation"),
-			TRANS("Limitation on the screenshot dimension; please ensure that both width and height exceed the initial values,\n or that they are smaller than the initial values.\n If this bothers, please submit a bug."));
+			TRANS("Limitation on the screenshot dimension; please ensure that both width and height exceed the initial values,\n or that they are smaller than the initial values.\n If this bothers, please submit a bug."))
+		;
 		return;
 	}
 
@@ -1590,7 +1597,7 @@ void MainWindowFrame::OnFileExportVideo(wxCommandEvent &event)
 	wxFileName fname;
 	wxString volume,path,name,ext;
 	bool hasExt;
-	fname.SplitPath(wxF->GetPath(),&volume,
+	fname.SplitPath(wxF.GetPath(),&volume,
 			&path,&name,&ext, &hasExt);
 
 	if(!hasExt)
@@ -1598,25 +1605,21 @@ void MainWindowFrame::OnFileExportVideo(wxCommandEvent &event)
 
 	///TODO: This is nasty and hackish. We should present a nice,
 	//well laid out dialog for frame count (show angular increment) 
-	wxTextEntryDialog *teD = new wxTextEntryDialog(this,wxTRANS("Number of frames"),wxTRANS("Frame count"),
+	wxTextEntryDialog teD(this,wxTRANS("Number of frames"),wxTRANS("Frame count"),
 						wxT("180"),(long int)wxOK|wxCANCEL);
 
 	unsigned int numFrames=0;
 	std::string strTmp;
 	do
 	{
-		if(teD->ShowModal() == wxID_CANCEL)
-		{
-			wxF->Destroy();
-			teD->Destroy();
+		if(teD.ShowModal() == wxID_CANCEL)
 			return;
-		}
 
 
-		strTmp = stlStr(teD->GetValue());
+		strTmp = stlStr(teD.GetValue());
 	}while(stream_cast(numFrames,strTmp));
 
-	teD->Destroy();
+	
 
 
 	bool saveOK=panelTop->saveImageSequence(d.getWidth(),d.getHeight(),
@@ -1629,16 +1632,16 @@ void MainWindowFrame::OnFileExportVideo(wxCommandEvent &event)
 	}
 	else
 	{
-		std::string dataFile = stlStr(wxF->GetPath());
+		std::string dataFile = stlStr(wxF.GetPath());
 		dataFile=std::string(TRANS("Saved 3D View :")) + dataFile;
 		statusMessage(dataFile.c_str(),MESSAGE_INFO);
 	}
-	wxF->Destroy();
+	
 
 
 	//Force a paint update for the scene, to  ensure aspect ratio information is preserved
 	wxPaintEvent ptEvent;
-	wxPostEvent(panelTop,event);
+	wxPostEvent(panelTop,ptEvent);
 }
 
 
@@ -1767,14 +1770,15 @@ void MainWindowFrame::OnFileExportFilterVideo(wxCommandEvent &event)
 
 	int w, h;
 	panelTop->GetClientSize(&w,&h);
-	FilterTree origTree;
+	FilterTree treeWithCache;
 
 	//Steal the filter tree, and give the pointer to the export dialog
 	// viscontrol now has an empty tree, so watch out.
-	visControl.swapFilterTree(origTree);
-	exportDialog->setTree(origTree);
+	visControl.swapFilterTree(treeWithCache);
+
+	exportDialog->setTree(treeWithCache);
 	exportDialog->prepare();
-	visControl.swapFilterTree(origTree);
+	visControl.swapFilterTree(treeWithCache);
 
 	//Animate dialog
 	if( (exportDialog->ShowModal() == wxID_CANCEL))
@@ -1784,40 +1788,57 @@ void MainWindowFrame::OnFileExportFilterVideo(wxCommandEvent &event)
 	}
 
 
-	setLockUI();
-	panelTop->Enable(false);
+	//Stop timer based events, and lock UI
+	//--
+	updateTimer->Stop();
+	autoSaveTimer->Stop();
+	//--
 
 	size_t numFrames;
 	numFrames=exportDialog->getNumFrames();
 
+	//Display modal progress dialog
+	//--
+	wxProgressDialog *prog;
+	prog = new wxProgressDialog(wxTRANS("Animating"),
+		wxTRANS("Performing refresh"),numFrames,this,wxPD_CAN_ABORT|wxPD_APP_MODAL );
+	prog->Show();
+	//--
 
 	currentlyUpdatingScene=true;
+
+	string errMessage;
+	bool needAbortDlg=false;
+
+
+	//Ensure that viscontrol returns control to progress window
+	visControl.setYieldWindow(prog);
+
 	//Modify the tree.
-	for(size_t ui=0;ui<=numFrames;ui++)
+	for(size_t ui=0;ui<numFrames;ui++)
 	{
+		//If user presses abort, abort procedure
+		if(!prog->Update(ui))
+			break;
+
 		bool needsUp;
-		//steal tree from viscontrol
-		visControl.swapFilterTree(origTree);
+		//steal tree, including caches, from viscontrol
+		visControl.swapFilterTree(treeWithCache);
 		
-		//Modify the tree, as needed
-		if(!exportDialog->getModifiedTree(ui,origTree,needsUp))
+		//Modify the tree, as needed, altering cached data
+		if(!exportDialog->getModifiedTree(ui,treeWithCache,needsUp))
 		{
 			std::string s;
 			stream_cast(ui,s);
-			s = TRANS("Filter property change failed") + s;
-			wxMessageDialog *wxMesD  =new wxMessageDialog(this,wxStr(s),
-					wxTRANS("Filter change error"),wxOK|wxICON_ERROR);
-			wxMesD->ShowModal();
-
-			wxMesD->Destroy();
-			setLockUI(false);
-			panelTop->Enable(true);
-			return;
+			errMessage = TRANS("Filter property change failed") + s;
+			needAbortDlg=true;
+			break;
 		}
 
 		//restore tree to viscontrol
-		visControl.swapFilterTree(origTree);
-	
+		visControl.swapFilterTree(treeWithCache);
+
+		//Perform update
 		if(needsUp || !exportDialog->wantsOnlyChanges())
 		{
 			typedef std::vector<const FilterStreamData * >  STREAMOUT;
@@ -1827,20 +1848,15 @@ void MainWindowFrame::OnFileExportFilterVideo(wxCommandEvent &event)
 			//First try to refresh the tree
 			if(visControl.refreshFilterTree(outData))
 			{
-				std::string errMesg,tmpStr;
+				std::string tmpStr;
 				stream_cast(tmpStr,ui);
-				errMesg=TRANS("Refresh failed on frame :") + tmpStr;
-				
-				wxErrMsg(this,TRANS("Refresh failed"),errMesg);
-
-				currentlyUpdatingScene=false;
-				setLockUI(false);
-				panelTop->Enable(true);
-				return;
+				errMessage=TRANS("Refresh failed on frame :") + tmpStr;
+				needAbortDlg=true;
+				break;
 			}
 			
 		
-			//Now update the scene, if needed
+			//Now obtain the output streams as a flat list
 			for(list<FILTER_OUTPUT_DATA>::iterator it=outData.begin();
 					it!=outData.end();++it)
 				outStreams.push_back(it->second);
@@ -1850,6 +1866,7 @@ void MainWindowFrame::OnFileExportFilterVideo(wxCommandEvent &event)
 			{
 				if(exportDialog->wantsImages())
 				{
+
 					vector<SelectionDevice *> dummy;
 					//update the output streams, but do not release
 					// the contents.
@@ -1867,7 +1884,7 @@ void MainWindowFrame::OnFileExportFilterVideo(wxCommandEvent &event)
 					{
 						if(!panelTop->saveImage(exportDialog->getImageWidth(),
 							exportDialog->getImageHeight(),
-							exportDialog->getFilename(ui,FILENAME_IMAGE).c_str(),true,false))
+							exportDialog->getFilename(ui,FILENAME_IMAGE).c_str(),false,false))
 						{
 							pair<string,string> errMsg;
 							string tmpStr;
@@ -2015,34 +2032,43 @@ void MainWindowFrame::OnFileExportFilterVideo(wxCommandEvent &event)
 			}
 			catch(std::pair<string,string> errMsg)
 			{
-				//Display an error dialog to the user
-				wxErrMsg(this,errMsg.first,errMsg.second);
-				
+				errMessage=errMsg.first + "\n" + errMsg.second;
 				//clean up data
 				visControl.safeDeleteFilterList(outData);
-				exportDialog->Destroy();
-				currentlyUpdatingScene=false;
-				setLockUI(false);
-				panelTop->Enable(true);
-
-				return;
+				needAbortDlg=true;
+				break;
 			}
 
 			//Clean up date from this run, releasing stream pointers.
 			visControl.safeDeleteFilterList(outData);
 			outStreams.clear();
+
 		}
 
 	}
+
+	visControl.setYieldWindow(this);
 	
+	if(needAbortDlg)
+		wxErrMsg(this,TRANS("Animate failed"),errMessage);
+
 	currentlyUpdatingScene=false;
-	exportDialog->Destroy();
-	setLockUI(false);
-	panelTop->Enable(true);
 
 	//Re-run the scene update for the original case,
 	// this allows for things like the selection bindings to be reinitialised.
 	doSceneUpdate();
+	
+	//Restore UI and timers
+	//--
+	prog->Destroy();
+	exportDialog->Destroy();
+	
+	panelTop->Enable(true);
+	
+	updateTimer->Start(UPDATE_TIMER_DELAY,wxTIMER_CONTINUOUS);
+	autoSaveTimer->Start(AUTOSAVE_DELAY*1000,wxTIMER_CONTINUOUS);
+	//--
+
 }
 
 void MainWindowFrame::OnFileExportPackage(wxCommandEvent &event)
@@ -2055,59 +2081,50 @@ void MainWindowFrame::OnFileExportPackage(wxCommandEvent &event)
 	}
 
 	//This could be nicer, or reordered
-	wxTextEntryDialog *wxT = new wxTextEntryDialog(this,wxTRANS("Package name"),
+	wxTextEntryDialog wxTD(this,wxTRANS("Package name"),
 					wxTRANS("Package directory name"),wxT(""),wxOK|wxCANCEL);
 
-	wxT->SetValue(wxTRANS("AnalysisPackage"));
+	wxTD.SetValue(wxTRANS("AnalysisPackage"));
 
-	if(wxT->ShowModal() == wxID_CANCEL)
-	{
-		wxT->Destroy();
+	if(wxTD.ShowModal() == wxID_CANCEL)
 		return;
-	}
 
 
 	//Pop up a directory dialog, to choose the base path for the new folder
-	wxDirDialog *wxD = new wxDirDialog(this);
 
-	wxMessageDialog *wxMesD  =new wxMessageDialog(this,wxTRANS("Package folder already exists, won't overwrite.")
+	unsigned int res;
+	
+	wxDirDialog wxD(this);
+	res = wxD.ShowModal();
+	
+	wxMessageDialog wxMesD(this,wxTRANS("Package folder already exists, won't overwrite.")
 					,wxTRANS("Not available"),wxOK|wxICON_ERROR);
 
-	unsigned int res;
-	res = wxD->ShowModal();
 	while(res != wxID_CANCEL)
 	{
 		//Dir cannot exist yet, as we want to make it.
-		if(wxDirExists(wxD->GetPath() + wxT->GetValue()))
+		if(wxDirExists(wxD.GetPath() + wxTD.GetValue()))
 		{
-			wxMesD->ShowModal();
-			res=wxD->ShowModal();
+			wxMesD.ShowModal();
+			res=wxD.ShowModal();
 		}
 		else
 			break;
 	}
-	wxMesD->Destroy();
 
 	//User aborted directory choice. 
 	if(res==wxID_CANCEL)
-	{
-		wxD->Destroy();
-		wxT->Destroy();
 		return;
-	}
 
 	wxString folder;
-	folder=wxD->GetPath() + wxFileName::GetPathSeparator() + wxT->GetValue() +
+	folder=wxD.GetPath() + wxFileName::GetPathSeparator() + wxTD.GetValue() +
 			wxFileName::GetPathSeparator();
 	//Check to see that the folder actually exists
 	if(!wxMkdir(folder))
 	{
-		wxMessageDialog *wxMesD  =new wxMessageDialog(this,wxTRANS("Package folder creation failed\ncheck writing to this location is possible.")
+		wxMessageDialog wxMesD(this,wxTRANS("Package folder creation failed\ncheck writing to this location is possible.")
 						,wxTRANS("Folder creation failed"),wxOK|wxICON_ERROR);
-
-		wxMesD->ShowModal();
-		wxMesD->Destroy();
-
+		wxMesD.ShowModal();
 		return;
 	}
 
@@ -2125,31 +2142,27 @@ void MainWindowFrame::OnFileExportPackage(wxCommandEvent &event)
 	else
 	{
 		//Copy the files in the mapping
-		wxProgressDialog *wxP = new wxProgressDialog(wxTRANS("Copying"),
-					wxTRANS("Copying referenced files"),fileMapping.size());
+		wxProgressDialog wxP(wxTRANS("Copying"),
+			wxTRANS("Copying referenced files"),fileMapping.size());
 
-		wxP->Show();
+		wxP.Show();
 		for(map<string,string>::iterator it=fileMapping.begin();
 				it!=fileMapping.end();++it)
 		{
 			if(!wxCopyFile(wxStr(it->second),folder+wxStr(it->first)))
 			{
 				wxErrMsg(this,TRANS("Save error"),TRANS("Error copying file"));
-				wxP->Destroy();
 				return;
 			}
-			wxP->Update();
+			wxP.Update();
 		}
 
-		wxP->Destroy();
 
 
 		wxString s;
 		s=wxString(wxTRANS("Saved package: ")) + folder;
 		statusMessage(stlStr(s).c_str(),MESSAGE_INFO);
 	}
-	
-	wxD->Destroy();
 }
 
 void MainWindowFrame::OnFileExportIons(wxCommandEvent &event)
@@ -2170,7 +2183,7 @@ void MainWindowFrame::OnFileExportIons(wxCommandEvent &event)
 	exportDialog->initialiseData(f);
 	
 	//create a file chooser for later.
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Save pos..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Save pos..."), wxT(""),
 		wxT(""),wxTRANS("POS Data (*.pos)|*.pos|All Files (*)|*"),wxFD_SAVE);
 	
 	//If the user cancels the file chooser, 
@@ -2192,19 +2205,18 @@ void MainWindowFrame::OnFileExportIons(wxCommandEvent &event)
 		}
 		
 	}
-	while( (wxF->ShowModal() == wxID_CANCEL)); //Check for user abort in file chooser
+	while( (wxF.ShowModal() == wxID_CANCEL)); //Check for user abort in file chooser
 
 	
 
 	//Check file already exists (no overwrite without asking)
-	if(wxFileExists(wxF->GetPath()))
+	if(wxFileExists(wxF.GetPath()))
 	{
-		wxMessageDialog *wxD  =new wxMessageDialog(this,wxTRANS("File already exists, overwrite?")
-												   ,wxTRANS("Overwrite?"),wxOK|wxCANCEL|wxICON_QUESTION);
-		if(wxD->ShowModal() == wxID_CANCEL)
+		wxMessageDialog wxD(this,wxTRANS("File already exists, overwrite?")
+				   ,wxTRANS("Overwrite?"),wxOK|wxCANCEL|wxICON_QUESTION);
+
+		if(wxD.ShowModal() == wxID_CANCEL)
 		{
-			wxD->Destroy();
-			
 			//Take control of the filter tree back from the export dialog,
 			// and return it to visControl	
 			exportDialog->swapFilterTree(f);
@@ -2217,7 +2229,7 @@ void MainWindowFrame::OnFileExportIons(wxCommandEvent &event)
 		}
 	}
 	
-	std::string dataFile = stlStr(wxF->GetPath());
+	std::string dataFile = stlStr(wxF.GetPath());
 	
 	//Retrieve the ion streams that we need to save
 	vector<const FilterStreamData *> exportVec;
@@ -2273,38 +2285,36 @@ void MainWindowFrame::OnFileExportRange(wxCommandEvent &event)
 	}
 
 
-
+	rngDialog->Destroy();
 }
 
 
 void MainWindowFrame::OnFileSaveAs(wxCommandEvent &event)
 {
 	//Show a file save dialog
-	wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Save state..."), wxT(""),
+	wxFileDialog wxF(this,wxTRANS("Save state..."), wxT(""),
 		wxT(""),wxTRANS("XML state file (*.xml)|*.xml|All Files (*)|*"),wxFD_SAVE);
 
 	//Show, then check for user cancelling dialog
-	if( (wxF->ShowModal() == wxID_CANCEL))
+	if( (wxF.ShowModal() == wxID_CANCEL))
 		return;
 
-	std::string dataFile = stlStr(wxF->GetPath());
+	std::string dataFile = stlStr(wxF.GetPath());
 
 	wxFileName fname;
 	wxString volume,path,name,ext;
 	bool hasExt;
-	fname.SplitPath(wxF->GetPath(),&volume,
+	fname.SplitPath(wxF.GetPath(),&volume,
 			&path,&name,&ext, &hasExt);
 
 	//Check file already exists (no overwrite without asking)
-	if(wxFileExists(wxF->GetPath()))
+	if(wxFileExists(wxF.GetPath()))
 	{
-		wxMessageDialog *wxD  =new wxMessageDialog(this,wxTRANS("File already exists, overwrite?")
+		wxMessageDialog wxD(this,wxTRANS("File already exists, overwrite?")
 						,wxTRANS("Overwrite?"),wxOK|wxCANCEL|wxICON_QUESTION);
-		if(wxD->ShowModal() == wxID_CANCEL)
-		{
-			wxD->Destroy();
+
+		if(wxD.ShowModal() == wxID_CANCEL)
 			return;
-		}
 	}
 	if(hasExt)
 	{
@@ -2324,14 +2334,14 @@ void MainWindowFrame::OnFileSaveAs(wxCommandEvent &event)
 	//and if so, do any of our filters
 	if(visControl.usingRelPaths() && visControl.hasStateOverrides())
 	{
-		wxMessageDialog *wxD  =new wxMessageDialog(this,wxTRANS("Files have been referred to using relative paths. Keep relative paths?")
+		wxMessageDialog wxD(this,wxTRANS("Files have been referred to using relative paths. Keep relative paths?")
 						,wxTRANS("Overwrite?"),wxYES|wxNO|wxICON_QUESTION);
 	
-		wxD->SetEscapeId(wxID_NO);
-		wxD->SetAffirmativeId(wxID_YES);
+		wxD.SetEscapeId(wxID_NO);
+		wxD.SetAffirmativeId(wxID_YES);
 		//Just for the moment, set relative paths to false, if the user asks.
 		//we will restore this later
-		if(wxD->ShowModal() == wxID_NO)
+		if(wxD.ShowModal() == wxID_NO)
 		{
 			oldRelPath=true;
 			visControl.setUseRelPaths(false);
@@ -2350,7 +2360,7 @@ void MainWindowFrame::OnFileSaveAs(wxCommandEvent &event)
 	else
 	{
 		std::string tmpStr;
-		tmpStr=stlStr(wxF->GetPath());
+		tmpStr=stlStr(wxF.GetPath());
 		visControl.setFilename(tmpStr);
 
 		//Update the recent files, and the menu.
@@ -2432,21 +2442,49 @@ void MainWindowFrame::OnEditRedo(wxCommandEvent &event)
 	doSceneUpdate();
 }
 
+void MainWindowFrame::OnEditRange(wxCommandEvent &event)
+{
+	RangeEditorDialog *r = new RangeEditorDialog(this,wxID_ANY,wxTRANS("Range editor"));
+
+	r->setPlotWrapper(*(visControl.getPlotWrapper()));
+
+	if(r->ShowModal() == wxID_CANCEL)
+	{
+		r->Destroy();
+		return;
+	}
+
+	//Obtain the modified rangefiles from the dialog
+	map<const RangeFile *, const RangeFile *> modifiedRanges;
+	r->getModifiedRanges(modifiedRanges);
+
+	//Pass the modified rangefiles to viscontrol
+	visControl.modifyRangeFiles(modifiedRanges);
+
+	r->Destroy();
+
+	doSceneUpdate();
+}
+
 void MainWindowFrame::OnEditPreferences(wxCommandEvent &event)
 {
 	//Create  a new preference dialog
 	PrefDialog *p = new PrefDialog(this);
 
+	//TODO: Refactor preference dialog to accept a config file object
+
 	vector<Filter *> filterDefaults;
 
 	//obtain direct copies of the cloned Filter pointers
 	configFile.getFilterDefaults(filterDefaults);
 	p->setFilterDefaults(filterDefaults);
 
-	//Get the default mouse parameters
+	//Get the default mouse/camera parameters
 	unsigned int mouseZoomRate,mouseMoveRate;
+	bool preferOrthoCamera;
 	mouseZoomRate=configFile.getMouseZoomRate();
 	mouseMoveRate=configFile.getMouseMoveRate();
+	preferOrthoCamera=configFile.getWantStartupOrthoCam();
 	
 	
 	unsigned int panelMode;
@@ -2468,6 +2506,7 @@ void MainWindowFrame::OnEditPreferences(wxCommandEvent &event)
 
 	p->setMouseZoomRate(mouseZoomRate);
 	p->setMouseMoveRate(mouseMoveRate);
+	p->setPreferOrthoCam(preferOrthoCamera);
 
 	//Initialise panel
 	p->initialise();
@@ -2486,12 +2525,14 @@ void MainWindowFrame::OnEditPreferences(wxCommandEvent &event)
 
 	mouseZoomRate=p->getMouseZoomRate();
 	mouseMoveRate=p->getMouseMoveRate();
+	preferOrthoCamera=p->getPreferOrthoCam();
 
 	panelTop->setMouseZoomFactor((float)mouseZoomRate/100.0f);
 	panelTop->setMouseMoveFactor((float)mouseMoveRate/100.0f);
 
 	configFile.setMouseZoomRate(mouseZoomRate);
 	configFile.setMouseMoveRate(mouseMoveRate);
+	configFile.setWantStartupOrthoCam(preferOrthoCamera);
 
 	//Note that this transfers control of pointer to the config file 
 	configFile.setFilterDefaults(filterDefaults);
@@ -2509,6 +2550,8 @@ void MainWindowFrame::OnEditPreferences(wxCommandEvent &event)
 	configFile.setAllowOnline(p->getAllowOnlineUpdate());
 	configFile.setAllowOnlineVersionCheck(p->getAllowOnlineUpdate());
 #endif
+	
+
 	p->cleanup();
 	p->Destroy();
 }
@@ -2534,6 +2577,8 @@ void MainWindowFrame::OnViewBackground(wxCommandEvent &event)
 		//Scale colour ranges to 0-> 1 and set in the gl pane	
 		panelTop->setGlClearColour(c.Red()/255.0f,c.Green()/255.0f,c.Blue()/255.0f);
 	}
+
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::OnViewControlPane(wxCommandEvent &event)
@@ -2623,7 +2668,7 @@ void MainWindowFrame::OnViewPlotLegend(wxCommandEvent &event)
 void MainWindowFrame::OnViewWorldAxis(wxCommandEvent &event)
 {
 	panelTop->currentScene.setWorldAxisVisible(event.IsChecked());
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::OnHelpHelp(wxCommandEvent &event)
@@ -2968,14 +3013,19 @@ void MainWindowFrame::OnTreeEndDrag(wxTreeEvent &event)
 	filterTreeDragSource=0;	
 }
 
-
-void MainWindowFrame::OnTreeSelectionChange(wxTreeEvent &event)
+void MainWindowFrame::OnTreeSelectionPreChange(wxTreeEvent &event)
 {
-	if(currentlyUpdatingScene)
+	if(currentlyUpdatingScene || visControl.isRefreshing())
 	{
 		event.Veto();
 		return;
 	}
+}
+
+
+void MainWindowFrame::OnTreeSelectionChange(wxTreeEvent &event)
+{
+	ASSERT(!(currentlyUpdatingScene || visControl.isRefreshing() ));
 
 	size_t filterId;
 	if(!getTreeFilterId(treeFilters->GetSelection(),filterId))
@@ -2989,8 +3039,10 @@ void MainWindowFrame::OnTreeSelectionChange(wxTreeEvent &event)
 	updateLastRefreshBox();
 	
 
+#if !wxCHECK_VERSION(2,9,0)
 	treeFilters->Fit();	
-	panelTop->Refresh();
+#endif
+	panelTop->forceRedraw();
 
 }
 
@@ -3025,6 +3077,19 @@ void MainWindowFrame::updateLastRefreshBox()
 	listLastRefresh->Thaw();
 }
 
+void MainWindowFrame::updateEditRangeMenu()
+{
+	vector<const Filter *> filtersRange,filtersSpectra;
+	visControl.getFiltersByType(filtersRange,FILTER_TYPE_RANGEFILE);
+	visControl.getFiltersByType(filtersSpectra,FILTER_TYPE_SPECTRUMPLOT);
+
+	//Only show the menu item if we have both ranges and plots in our
+	// fitler tree
+	bool wantEnable = filtersRange.size() && filtersSpectra.size();
+	editRangeMenuItem->Enable(wantEnable);
+	
+}
+
 void MainWindowFrame::OnTreeDeleteItem(wxTreeEvent &event)
 {
 	if(visControl.isRefreshing() )
@@ -3049,10 +3114,7 @@ void MainWindowFrame::OnTreeBeginLabelEdit(wxTreeEvent &event)
 void MainWindowFrame::OnTreeEndLabelEdit(wxTreeEvent &event)
 {
 	if(event.IsEditCancelled())
-	{
-		treeFilters->Fit();
 		return;
-	}
 
 
 	//There is a case where the tree doesn't quite clear
@@ -3081,7 +3143,6 @@ void MainWindowFrame::OnTreeEndLabelEdit(wxTreeEvent &event)
 		}
 	}
 
-	treeFilters->Fit();
 }
 
 void MainWindowFrame::OnTreeBeginDrag(wxTreeEvent &event)
@@ -3179,6 +3240,92 @@ void MainWindowFrame::OnBtnFilterTreeErrs(wxCommandEvent &event)
 
 }
 
+//There appears to be a bug in MSW wx 3.0. Key down events don't work
+// in MSW (including in the wx official samples). To work around, use generic
+// KEY_DOWN event
+#if defined(WX_TREE_WORKAROUND)
+void MainWindowFrame::OnTreeKeyDown(wxKeyEvent &event)
+{
+ 	if(currentlyUpdatingScene)
+ 	{
+ 		return;
+ 	}
+	const wxKeyEvent k = event; 
+ 	switch(k.GetKeyCode())
+	{
+		case WXK_BACK:
+		case WXK_DELETE:
+		{
+			wxTreeItemId id;
+
+			if(!treeFilters->GetCount())
+				return;
+
+			id=treeFilters->GetSelection();
+
+			if(!id.IsOk() || id == treeFilters->GetRootItem())
+				return;
+
+
+			//TODO: Refactor out wxTreeItem... code, into separate routine
+			// that only spits out viscontrol Ids
+			//Rebuild the tree control, ensuring that the parent is visible,
+			//if it has a parent (recall root node  of wx control is hidden)
+			
+			//Get the parent & its data
+			wxTreeItemId parent = treeFilters->GetItemParent(id);
+			wxTreeItemData *parentData=treeFilters->GetItemData(parent);
+
+			//Ask viscontrol to ensure that the parent stays persistently
+			// visible when next rebuilding the tree control
+			visControl.setWxTreeFilterViewPersistence(
+					((wxTreeUint*)parentData)->value);	
+
+			//Tree data contains unique identifier for vis control to do matching
+			wxTreeItemData *tData=treeFilters->GetItemData(id);
+			//Remove the item from the Tree 
+			visControl.removeFilterSubtree(((wxTreeUint *)tData)->value);
+			//Clear property grid
+			gridFilterPropGroup->clear();
+			if(parent !=treeFilters->GetRootItem())
+			{
+				ASSERT(parent.IsOk()); // should be - base node should always exist.
+
+				//Ensure that the parent stays visible 
+				visControl.setWxTreeFilterViewPersistence(
+						((wxTreeUint*)parentData)->value);
+				visControl.updateWxTreeCtrl(treeFilters);
+
+				
+				//OK, so those old Id s are no longer valid,
+				//as we just rebuilt the tree. We need new ones
+				//Parent is now selected
+				parent=treeFilters->GetSelection();
+				parentData=treeFilters->GetItemData(parent);
+
+
+				//Update the filter property grid with the parent's data
+				visControl.updateFilterPropGrid(gridFilterPropGroup,
+							((wxTreeUint *)parentData)->value);
+			}
+			else
+			{
+				if(parent.IsOk())
+					visControl.updateWxTreeCtrl(treeFilters);
+			}
+	
+			//Force a scene update, independent of if autoUpdate is enabled. 
+			doSceneUpdate();	
+		
+			break;
+		}
+		default:
+			event.Skip();
+	}
+}
+
+#else
+
 void MainWindowFrame::OnTreeKeyDown(wxTreeEvent &event)
 {
 	if(currentlyUpdatingScene)
@@ -3259,6 +3406,7 @@ void MainWindowFrame::OnTreeKeyDown(wxTreeEvent &event)
 			event.Skip();
 	}
 }
+#endif
 
 void MainWindowFrame::OnGridFilterPropertyChange(wxGridEvent &event)
 {
@@ -3345,7 +3493,7 @@ void MainWindowFrame::OnGridCameraPropertyChange(wxGridEvent &event)
 	else
 		event.Veto();
 
-	panelTop->Refresh(true);
+	panelTop->forceRedraw();
 	programmaticEvent=false;
 
 
@@ -3404,7 +3552,7 @@ void MainWindowFrame::OnComboCameraEnter(wxCommandEvent &event)
 		setSaveStatus();
 
 		//force redraw in 3D pane
-		panelTop->Refresh(false);
+		panelTop->forceRedraw();
 		return ;
 	}
 
@@ -3419,7 +3567,7 @@ void MainWindowFrame::OnComboCameraEnter(wxCommandEvent &event)
 
 	visControl.setCam(u);
 	visControl.updateCamPropertyGrid(gridCameraProperties,u);
-	panelTop->Refresh(false);
+	panelTop->forceRedraw();
 
 	setSaveStatus();
 }
@@ -3438,7 +3586,7 @@ void MainWindowFrame::OnComboCamera(wxCommandEvent &event)
 	std::string s = std::string(TRANS("Restored camera: ") ) +stlStr(comboCamera->GetValue());	
 	statusMessage(s.c_str(),MESSAGE_INFO);
 	
-	panelTop->Refresh(false);
+	panelTop->forceRedraw();
 	
 	setSaveStatus();
 	return ;
@@ -3518,11 +3666,11 @@ void MainWindowFrame::OnComboFilter(wxCommandEvent &event)
 		case FILTER_TYPE_RANGEFILE:
 		{
 			///Prompt user for file
-			wxFileDialog *wxF = new wxFileDialog(this,wxTRANS("Select RNG File..."),wxT(""),wxT(""),
+			wxFileDialog wxF(this,wxTRANS("Select RNG File..."),wxT(""),wxT(""),
 					wxTRANS("Range Files (*rng; *env; *rrng)|*rng;*env;*rrng|RNG File (*.rng)|*.rng|Environment File (*.env)|*.env|RRNG Files (*.rrng)|*.rrng|All Files (*)|*"),wxFD_OPEN|wxFD_FILE_MUST_EXIST);
 			
 
-			if( (wxF->ShowModal() == wxID_CANCEL))
+			if( (wxF.ShowModal() == wxID_CANCEL))
 			{
 				haveErr=true;
 				break;
@@ -3530,7 +3678,7 @@ void MainWindowFrame::OnComboFilter(wxCommandEvent &event)
 
 			//Load rangefile &  construct filter
 			Filter*f=configFile.getDefaultFilter(FILTER_TYPE_RANGEFILE);
-			std::string dataFile = stlStr(wxF->GetPath());
+			std::string dataFile = stlStr(wxF.GetPath());
 			RangeFileFilter *r = (RangeFileFilter*)f;
 			r->setRangeFilename(dataFile);
 
@@ -3606,7 +3754,6 @@ bool MainWindowFrame::doSceneUpdate()
 	//Disable tree filters,refresh button and undo
 	setLockUI(true);
 
-	panelSpectra->Refresh();
 
 	if(!requireFirstUpdate)
 		textConsoleOut->Clear();	
@@ -3627,13 +3774,25 @@ bool MainWindowFrame::doSceneUpdate()
 		p=visControl.getProgress();
 
 		statusTimer->Start(STATUS_TIMER_DELAY,wxTIMER_ONE_SHOT);
-		std::string errString;
-		if(p.curFilter)
-			errString = p.curFilter->getErrString(errCode);
-		else
-			errString = TRANS("Refresh Aborted.");
+		if(errCode)
+		{
+			std::string errString;
+			if(errCode <FILTERTREE_REFRESH_ERR_BEGIN)
+			{
+				if(p.curFilter)
+					errString = p.curFilter->getErrString(errCode);
+				else
+					errString = TRANS("Refresh Aborted.");
+			}
+			else 
+			{
+				errString=FilterTree::getRefreshErrString(errCode);
+			}
+			
+			statusMessage(errString.c_str(),MESSAGE_ERROR);	
+		}
+
 	
-		statusMessage(errString.c_str(),MESSAGE_ERROR);	
 	}
 
 	//Call the progress one more time, in order to ensure that user sees "100%"
@@ -3646,10 +3805,11 @@ bool MainWindowFrame::doSceneUpdate()
 	//Restore the UI elements to their interactive state
 	setLockUI(false);
 
-	panelTop->Refresh(false);
+	panelTop->forceRedraw();
 	panelSpectra->Refresh(false);	
 
 	updateLastRefreshBox();
+	updateEditRangeMenu();
 
 	panelTop->currentScene.setShowProgress(false);
 
@@ -3672,6 +3832,10 @@ bool MainWindowFrame::doSceneUpdate()
 
 	setSaveStatus();
 
+	
+	//Force a paint update for the scene
+	panelTop->forceRedraw();
+
 	//Return a value dependant upon whether we successfully loaded 
 	//the data or not
 	return errCode == 0;
@@ -3731,8 +3895,10 @@ void MainWindowFrame::setFilterTreeAnalysisImages()
 	
 #if defined(__WIN32) || defined(__WIN64)
 	//HACK: Under MSW, force button to correct positioning, by forcing a relayout
+#if !wxCHECK_VERSION(2,9,0)
 	treeFilters->GetParent()->Layout();
 #endif
+#endif
 }
 
 void MainWindowFrame::OnStatusBarTimer(wxTimerEvent &event)
@@ -3808,7 +3974,9 @@ void MainWindowFrame::OnUpdateTimer(wxTimerEvent &event)
 		if(visControl.numCams() == 1)
 			visControl.ensureSceneVisible(3);
 
-		panelTop->Refresh();
+
+		doSceneUpdate();
+
 		requireFirstUpdate=false;
 	}
 
@@ -3828,7 +3996,6 @@ void MainWindowFrame::OnUpdateTimer(wxTimerEvent &event)
 	//Don't attempt to update if already updating, or last
 	//update aborted
 	bool visUpdates=visControl.hasUpdates();
-	bool plotUpdates=panelSpectra->hasUpdates();
 
 	//I can has updates?
 	if((visUpdates || plotUpdates) && !visControl.isRefreshing())
@@ -3841,6 +4008,7 @@ void MainWindowFrame::OnUpdateTimer(wxTimerEvent &event)
 
 		doSceneUpdate();
 	}
+	plotUpdates=false;
 
 	//Check the openGL pane to see if the camera property grid needs refreshing
 	if(panelTop->hasCameraUpdates())
@@ -3864,8 +4032,7 @@ void MainWindowFrame::OnUpdateTimer(wxTimerEvent &event)
 		setSaveStatus();
 	}
 
-	if(plotUpdates)
-		panelSpectra->clearUpdates();
+		
 
 	if(visUpdates)
 	{
@@ -3891,10 +4058,17 @@ void MainWindowFrame::statusMessage(const char *message, unsigned int type)
 	switch(type)
 	{
 		case MESSAGE_ERROR:
+		//Wx does not support statusbar colouring under MSW
+		// using this can result in visual oddness
+		#if !(defined(__WIN32) || defined(__WIN64))
 			MainFrame_statusbar->SetBackgroundColour(*wxGREEN);
+		#endif
 			break;
 		case MESSAGE_INFO:
+		//Wx does not support statusbar colouring under MSW, and using this can result in visual oddness
+		#if !(defined(__WIN32) || defined(__WIN64))
 			MainFrame_statusbar->SetBackgroundColour(*wxCYAN);
+		#endif
 			break;
 		case MESSAGE_HINT:
 			break;
@@ -4142,7 +4316,7 @@ void MainWindowFrame::updatePostEffects()
 		panelTop->currentScene.addEffect(anaglyph);
 	}
 
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::updateFxUI(const vector<const Effect*> &effs)
@@ -4358,7 +4532,7 @@ void MainWindowFrame::OnControlSplitMove(wxSplitterEvent &event)
 void MainWindowFrame::OnTopBottomSplitMove(wxSplitterEvent &event)
 {
 	Refresh();
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::OnControlUnsplit(wxSplitterEvent &event)
@@ -4573,7 +4747,7 @@ void MainWindowFrame::OnCameraGridCellEditorShow(wxGridEvent &event)
 			break;
 	}
 
-	panelTop->Refresh(false);
+	panelTop->forceRedraw();
 
 	setSaveStatus();
 }
@@ -4585,7 +4759,11 @@ void MainWindowFrame::OnButtonGridCopy(wxCommandEvent &event)
 
 void MainWindowFrame::OnButtonGridSave(wxCommandEvent &event)
 {
+#if wxCHECK_VERSION(2,9,0)
+	if(!gridRawData->GetNumberRows()||!gridRawData->GetNumberCols())
+#else
 	if(!gridRawData->GetRows()||!gridRawData->GetCols())
+#endif
 	{
 		statusMessage(TRANS("No data to save"),MESSAGE_ERROR);
 		return;
@@ -4597,14 +4775,14 @@ void MainWindowFrame::OnCheckAlpha(wxCommandEvent &event)
 {
 	panelTop->currentScene.setAlpha(event.IsChecked());
 
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::OnCheckLighting(wxCommandEvent &event)
 {
 	panelTop->currentScene.setLighting(event.IsChecked());
 	
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 }
 
 void MainWindowFrame::OnCheckCacheEnable(wxCommandEvent &event)
@@ -4648,6 +4826,9 @@ void MainWindowFrame::OnCheckLimitOutput(wxCommandEvent &event)
 
 void MainWindowFrame::OnTextLimitOutput(wxCommandEvent &event)
 {
+	//Under GTK wx3.0, this fires during object construction
+	if(!initedOK)
+		return;
 	size_t limitVal;
 	bool isOK=validateTextAsStream(textLimitOutput,limitVal);
 
@@ -4761,17 +4942,15 @@ void MainWindowFrame::OnClose(wxCloseEvent &event)
 		}
 		else
 		{
-			wxMessageDialog *wxD  =new wxMessageDialog(this,
+			wxMessageDialog wxD(this,
 					wxTRANS("Waiting for refresh to abort. Exiting could lead to the program backgrounding. Exit anyway? "),
 					wxTRANS("Confirmation request"),wxOK|wxCANCEL|wxICON_ERROR);
 
-			if(wxD->ShowModal() != wxID_OK)
+			if(wxD.ShowModal() != wxID_OK)
 			{
 				event.Veto();
-				wxD->Destroy();
 				return;
 			}
-			wxD->Destroy();
 		}
 	}
 	else
@@ -4783,16 +4962,14 @@ void MainWindowFrame::OnClose(wxCloseEvent &event)
 			if(visControl.stateModifyLevel() >= STATE_MODIFIED_ANCILLARY)
 			{
 				//Prompt for close
-				wxMessageDialog *wxD  =new wxMessageDialog(this,
+				wxMessageDialog wxD(this,
 						wxTRANS("Are you sure you wish to exit 3Depict?"),\
 						wxTRANS("Confirmation request"),wxOK|wxCANCEL|wxICON_ERROR);
-				if(wxD->ShowModal() != wxID_OK)
+				if(wxD.ShowModal() != wxID_OK)
 				{
 					event.Veto();
-					wxD->Destroy();
 					return;
 				}
-				wxD->Destroy();
 			
 			}
 		}
@@ -4880,7 +5057,7 @@ void MainWindowFrame::OnCheckPostProcess(wxCommandEvent &event)
 		
 	setSaveStatus();
 	
-	panelTop->Refresh();
+	panelTop->forceRedraw();
 }
 
 
@@ -4927,16 +5104,18 @@ void MainWindowFrame::OnFxCropAxisTwo(wxCommandEvent &event)
 
 void MainWindowFrame::linkCropWidgets()
 {
-	//Adjust the link mode as needed
-	//Lets cheat a little and parse the combo box contents
+	//Adjust the link mode for the 
+	//two crop panels as needed
 	
-	unsigned int linkMode;
+	unsigned int linkMode=0;
 
 	string first[2],second[2];
 
 	wxString s;
 	string tmp;
-	
+
+	//TODO: Don't parse output, but actually 
+	// wire in axis selection
 	s=comboFxCropAxisOne->GetValue();
 	tmp=stlStr(s);
 	first[0]=tmp[0];
@@ -4947,26 +5126,26 @@ void MainWindowFrame::linkCropWidgets()
 	first[1]=tmp[0];
 	second[1]=tmp[2];
 
-
-	linkMode=0;
-	//First and second axis match?
 	if(first[0] == first[1] && second[0] == second[1])
 	{
+		//First and second axis match? then link both axes
 		linkMode=CROP_LINK_BOTH;
 	}
 	else if(first[0] == second[1] && second[0] == first[1])
-		linkMode=CROP_LINK_BOTH_FLIP;
+		linkMode=CROP_LINK_BOTH_FLIP; //Fipped axis linkage
 	else if(first[0] == first[1])
-		linkMode=CROP_LINK_LR;
+		linkMode=CROP_LINK_LR; //left right libnkage
 	else if(second[0] == second[1])
-		linkMode=CROP_LINK_TB;
+		linkMode=CROP_LINK_TB; //top pottom linkage
 	else if(second[0] == first[1])
 	{
+		//tb-lr flip
 		panelFxCropOne->link(panelFxCropTwo,CROP_LINK_TB_FLIP);
 		panelFxCropTwo->link(panelFxCropOne,CROP_LINK_LR_FLIP);
 	}
 	else if(second[1]== first[0])
 	{
+		//lr-tb flip
 		panelFxCropOne->link(panelFxCropTwo,CROP_LINK_LR_FLIP);
 		panelFxCropTwo->link(panelFxCropOne,CROP_LINK_TB_FLIP);
 	}
@@ -5045,6 +5224,35 @@ void MainWindowFrame::restoreConfigDefaults()
 
 		visControl.setIonDisplayLimit(configFile.getMaxPoints());
 	}
+
+	//Show startup tip dialog as needed
+	if(configFile.wantStartupTips())
+	{
+		std::string tipFile;
+		tipFile=locateDataFile("startup-tips.txt");
+		if(!tipFile.empty())
+		{
+			const unsigned int ROUGH_NUMBER_TIPS=22;
+			bool wantTipsAgain;
+			wxTipProvider *tipProvider = wxCreateFileTipProvider(wxStr(tipFile), (float)rand()/(float)RAND_MAX*(float)ROUGH_NUMBER_TIPS);
+			wantTipsAgain=wxShowTip(this, tipProvider);
+
+			if(!wantTipsAgain)
+				configFile.setWantStartupTips(false);
+
+			delete tipProvider;
+		}
+		else
+		{
+			WARN(false,"Tip file not found at startup, but user wanted it...");
+		}
+	}
+	
+	if(configFile.getWantStartupOrthoCam())
+	{
+		visControl.setCamProperties(visControl.getActiveCamId(), 
+					CAMERA_KEY_LOOKAT_PROJECTIONMODE,TRANS("Orthogonal"));
+	}
 }
 
 void MainWindowFrame::restoreConfigPanelDefaults()
@@ -5129,6 +5337,11 @@ void MainWindowFrame::restoreConfigPanelDefaults()
 
 void MainWindowFrame::SetCommandLineFiles(wxArrayString &files)
 {
+	//WX Bug: Re-entrancy can occur during modal dialog display due to timers
+	// disable timer before showing dialog
+	updateTimer->Stop();
+	autoSaveTimer->Stop();
+	
 	textConsoleOut->Clear();
 	//Load them up as data.
 	for(unsigned int ui=0;ui<files.size();ui++)
@@ -5138,9 +5351,12 @@ void MainWindowFrame::SetCommandLineFiles(wxArrayString &files)
 	if(files.GetCount())
 	{
 		//OK, we got here, so it must be loaded.
-		//so we need to update.
-		requireFirstUpdate=true;
+		requireFirstUpdate=false;
 	}
+
+	//Restart timers
+	updateTimer->Start(UPDATE_TIMER_DELAY,wxTIMER_CONTINUOUS);
+	autoSaveTimer->Start(AUTOSAVE_DELAY*1000,wxTIMER_CONTINUOUS);
 }
 
 void MainWindowFrame::OnNoteDataView(wxNotebookEvent &evt)
@@ -5268,13 +5484,13 @@ void MainWindowFrame::checkReloadAutosave()
 	{
 		//If we have exactly one autosave, ask the user about loading it
 		wxString filePath=wxStr(autosaveNamePIDMap.begin()->first);
-		wxMessageDialog *wxD  =new wxMessageDialog(this,
+		wxMessageDialog wxD(this,
 			wxTRANS("An auto-save state was found, would you like to restore it?.") 
 			,wxTRANS("Autosave"),wxCANCEL|wxOK|wxICON_QUESTION|wxYES_DEFAULT );
 
-		if(wxD->ShowModal()!= wxID_CANCEL)
+		if(wxD.ShowModal()!= wxID_CANCEL)
 		{
-			if(!loadFile(filePath))
+			if(!loadFile(filePath,false,true))
 			{
 				doErase=true;
 				statusMessage(TRANS("Unable to load autosave file.."),MESSAGE_ERROR);
@@ -5347,12 +5563,10 @@ void MainWindowFrame::checkReloadAutosave()
 				std::string tmpStr;
 				tmpStr =filenamesAndTimes[dlg->getSelectedItem()].second;
 
-				if(loadFile(wxStr(tmpStr)))
+				if(loadFile(wxStr(tmpStr),false,true))
 				{
 					//Prevent the program from allowing save menu usage
 					//into autosave file
-					
-					
 					doErase=true;
 				}
 				else 
@@ -5472,7 +5686,11 @@ void MainWindowFrame::set_properties()
     comboFilters->SetSelection(-1);
     
     comboFilters->SetToolTip(wxTRANS("List of available filters"));
-    treeFilters->SetToolTip(wxTRANS("Tree of data filters"));
+#ifdef __APPLE__
+    treeFilters->SetToolTip(wxTRANS("Tree - drag to move items, hold ⌘ for copy. Tap delete to remove items"));
+#else
+    treeFilters->SetToolTip(wxTRANS("Tree - drag to move items, hold Ctrl for copy. Tap delete to remove items."));
+#endif
     checkAutoUpdate->SetToolTip(wxTRANS("Enable/Disable automatic updates of data when filter change takes effect"));
     checkAutoUpdate->SetValue(true);
 
@@ -5525,10 +5743,8 @@ void MainWindowFrame::set_properties()
     // end wxGlade
     //
 
-    PlotWrapper *p=new PlotWrapper; //plotting area
-    
+    PlotWrapper *p=new PlotWrapper; //plotting handler
     panelSpectra->setPlotWrapper(p);
-    panelSpectra->setPlotList(plotList);
     
     //Set the controls that the viscontrol needs to interact with
     visControl.setScene(&panelTop->currentScene); //GL scene
@@ -5543,6 +5759,7 @@ void MainWindowFrame::set_properties()
     comboCamera->Bind(wxEVT_SET_FOCUS, &MainWindowFrame::OnComboCameraSetFocus, this);
     comboStash->Bind(wxEVT_SET_FOCUS, &MainWindowFrame::OnComboStashSetFocus, this);
     noteDataView->Bind(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, &MainWindowFrame::OnNoteDataView, this);
+    treeFilters->Bind(wxEVT_KEY_DOWN,&MainWindowFrame::OnTreeKeyDown, this);
 #else
     comboCamera->Connect(wxID_ANY,
                  wxEVT_SET_FOCUS,
diff --git a/src/gui/mainFrame.h b/src/gui/mainFrame.h
index c36bc04..c85eeb8 100644
--- a/src/gui/mainFrame.h
+++ b/src/gui/mainFrame.h
@@ -31,8 +31,8 @@
 // end wxGlade
 
 //Local stuff
-#include "wxcommon.h"
-#include "wxcomponents.h"
+#include "wx/wxcommon.h"
+#include "wx/wxcomponents.h"
 #include "glPane.h"
 #include "mathglPane.h"
 #include "cropPanel.h" // cropping tools
@@ -43,6 +43,11 @@
 #ifndef THREEDEPICT_H 
 #define THREEDEPICT_H
 
+//Workaround for keypress not detected under MSW wx3.0
+#if wxCHECK_VERSION(2,9,0) && ( defined(__WIN32) || defined(__WIN64))
+#define WX_TREE_WORKAROUND
+#endif
+
 class FileDropTarget;
 
 enum
@@ -92,7 +97,7 @@ private:
 	//!Update the post-processing effects in the 3D scene. 
 	void updatePostEffects(); 
 	//!Load a file into the panel given the full path to the file
-	bool loadFile(const wxString &dataFile,bool merge=false);
+	bool loadFile(const wxString &dataFile,bool merge=false,bool noUpdate=false);
 
 	//!Load any errors that were detected in the last refresh into the filter tree
 	void setFilterTreeAnalysisImages(); 
@@ -142,7 +147,10 @@ private:
 
 	//Map to convert filter drop down choices to IDs
 	map<std::string,size_t> filterMap;
-    
+   
+	//TODO: Refactor -  remove me.
+	// True if there are pending updates for the mahthgl window
+	bool plotUpdates;
 protected:
     wxTimer *statusTimer;
     wxTimer *progressTimer;
@@ -156,6 +164,7 @@ protected:
     wxMenuItem *checkViewWorldAxis;
 
     wxMenuItem *editUndoMenuItem,*editRedoMenuItem;
+    wxMenuItem *editRangeMenuItem;
     wxMenuItem *fileSave;
     wxMenu *recentFilesMenu;
     wxMenu *fileMenu;
@@ -182,7 +191,7 @@ protected:
     wxBitmapButton* btnFilterTreeErrs;
     wxPanel* filterTreePane;
     wxStaticText* propGridLabel;
-    wxPropertyGrid* gridFilterPropGroup;
+    wxCustomPropGrid* gridFilterPropGroup;
     wxPanel* filterPropertyPane;
     wxSplitterWindow* filterSplitter;
     wxPanel* noteData;
@@ -190,7 +199,7 @@ protected:
     wxComboBox* comboCamera;
     wxButton* buttonRemoveCam;
     wxStaticLine* cameraNamePropertySepStaticLine;
-    wxPropertyGrid* gridCameraProperties;
+    wxCustomPropGrid* gridCameraProperties;
     wxScrolledWindow* noteCamera;
     wxCheckBox* checkPostProcessing;
     wxCheckBox* checkFxCrop;
@@ -275,7 +284,12 @@ public:
     virtual void OnComboStashEnter(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnComboStash(wxCommandEvent &event); // wxGlade: <event_handler>
     virtual void OnTreeEndDrag(wxTreeEvent &event); // wxGlade: <event_handler>
-    virtual void OnTreeKeyDown(wxTreeEvent &event); // wxGlade: <event_handler>
+#if defined(WX_TREE_WORKAROUND)
+    virtual void OnTreeKeyDown(wxKeyEvent &event); // wxGlade: <event_handler>
+#else
+     virtual void OnTreeKeyDown(wxTreeEvent &event); // wxGlade: <event_handler>
+#endif
+    virtual void OnTreeSelectionPreChange(wxTreeEvent &event); // wxGlade: <event_handler>
     virtual void OnTreeSelectionChange(wxTreeEvent &event); // wxGlade: <event_handler>
     virtual void OnTreeDeleteItem(wxTreeEvent &event); // wxGlade: <event_handler>
     virtual void OnTreeBeginDrag(wxTreeEvent &event); // wxGlade: <event_handler>
@@ -291,6 +305,7 @@ public:
 
     virtual void OnEditUndo(wxCommandEvent &event);    
     virtual void OnEditRedo(wxCommandEvent &event);    
+    virtual void OnEditRange(wxCommandEvent &event);    
     virtual void OnEditPreferences(wxCommandEvent &event);    
    
     virtual void OnButtonRemoveCam(wxCommandEvent &event); // wxGlade: <event_handler>
@@ -374,6 +389,8 @@ public:
     //Restore panel layout defaults
     void restoreConfigPanelDefaults();
 
+    void onPanelSpectraUpdate() {plotUpdates=true;} ;
+
     bool initOK() const {return initedOK;}
 
     //This is isolated from the layout code, due to "bug" 4815 in wx. The splitter window
@@ -383,6 +400,10 @@ public:
 	    	restoreConfigPanelDefaults();
 	   	};
 
+
+    //Update the enabled status for the range entry in the edit menu
+    void updateEditRangeMenu();
+
 }; // wxGlade: end class
 
 
diff --git a/src/gui/mathglPane.cpp b/src/gui/mathglPane.cpp
index 4d76ce1..e2fbd32 100644
--- a/src/gui/mathglPane.cpp
+++ b/src/gui/mathglPane.cpp
@@ -18,11 +18,11 @@
 
 #include <wx/wx.h>
 #include <wx/dcbuffer.h>
-#include "wxcomponents.h"
+#include "wx/wxcomponents.h"
 
 #include "mathglPane.h"
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 #include "common/translation.h"
 
 #ifdef USE_MGL2
@@ -64,6 +64,7 @@ BEGIN_EVENT_TABLE(MathGLPane, wxPanel)
 	EVT_RIGHT_DOWN(MathGLPane::rightClick)
 	EVT_LEAVE_WINDOW(MathGLPane::mouseLeftWindow)
 	EVT_LEFT_DCLICK(MathGLPane::mouseDoubleLeftClick) 
+	EVT_MIDDLE_DCLICK(MathGLPane::mouseDoubleLeftClick) 
 	EVT_SIZE(MathGLPane::resized)
 	EVT_KEY_DOWN(MathGLPane::keyPressed)
 	EVT_KEY_UP(MathGLPane::keyReleased)
@@ -86,11 +87,14 @@ wxPanel(parent, id,  wxDefaultPosition, wxDefaultSize)
 	COMPILE_ASSERT(THREEDEP_ARRAYSIZE(MOUSE_ACTION_NEEDS_REDRAW) == MOUSE_MODE_ENUM_END);
 
 	hasResized=true;
-	limitInteract=haveUpdates=false;
+	limitInteract=false;
 	mouseDragMode=MOUSE_MODE_ENUM_END;	
 	leftWindow=true;
 	thePlot=0;	
 	gr=0;
+	ownPlotPtr=false;
+	lastEditedPlot=lastEditedRegion=-1;
+	regionSelfUpdate=false;
 
 	SetBackgroundStyle(wxBG_STYLE_CUSTOM);
 
@@ -98,7 +102,7 @@ wxPanel(parent, id,  wxDefaultPosition, wxDefaultSize)
 
 MathGLPane::~MathGLPane()
 {
-	if(thePlot)
+	if(thePlot && ownPlotPtr)
 		delete thePlot;
 	if(gr)
 		delete gr;
@@ -108,7 +112,7 @@ MathGLPane::~MathGLPane()
 bool MathGLPane::readyForInput() const
 {
 	return (thePlot && gr && 
-		!thePlot->isInteractionLocked() && !thePlot->visibleEmpty());
+		!thePlot->isInteractionLocked()  && thePlot->getNumTotal());
 }
 
 unsigned int MathGLPane::getAxisMask(int x, int y) const
@@ -147,12 +151,13 @@ unsigned int MathGLPane::getAxisMask(int x, int y) const
 	return retVal;
 }
 
-void MathGLPane::setPlotWrapper(PlotWrapper *newPlot)
+void MathGLPane::setPlotWrapper(PlotWrapper *newPlot,bool takeOwnPtr)
 {
-	if(thePlot)
+	if(thePlot && ownPlotPtr)
 		delete thePlot;
 
 	thePlot=newPlot;
+	ownPlotPtr=takeOwnPtr;
 
 	Refresh();
 }
@@ -164,7 +169,7 @@ void MathGLPane::render(wxPaintEvent &event)
 	
     wxAutoBufferedPaintDC   *dc=new wxAutoBufferedPaintDC(this);
 
-	if(!thePlot || !plotSelList || thePlot->isInteractionLocked() )
+	if(!thePlot || thePlot->isInteractionLocked() )
 	{
 		delete dc;
 		return;
@@ -185,10 +190,8 @@ void MathGLPane::render(wxPaintEvent &event)
 
 
 	//Set the enabled and disabled plots
-	wxArrayInt a;
-
-	unsigned int nItems =plotSelList->GetSelections(a);
-
+	unsigned int nItems=thePlot->getNumVisible();
+	
 	if(!nItems)
 	{
 #ifdef __WXGTK__
@@ -219,21 +222,6 @@ void MathGLPane::render(wxPaintEvent &event)
 
 	}
 
-	//Set which plots should be visible
-	thePlot->hideAll();
-	std::vector<unsigned int> newVisible;
-	for(unsigned int ui=0;ui<nItems; ui++)
-	{
-		unsigned int plotID;
-		wxListUint *l =(wxListUint *) plotSelList->GetClientObject(a[ui]);
-		plotID = l->value;
-		newVisible.push_back(ui);
-		thePlot->setVisible(plotID,true);
-	}
-
-
-
-
 	//If the plot has changed, been resized or is performing
 	// a mouse action that reuqires updating, we need to update it
 	//likewise if we don't have a plot, we need one.
@@ -280,15 +268,6 @@ void MathGLPane::render(wxPaintEvent &event)
 		hasResized=false;
 	}
 
-	//If the visibility hasn't changed, then reset the 
-	//plot to "no changes" state. Otherwise,
-	//swap the visibility vectors
-	if(lastVisible.size() == newVisible.size() &&
-		std::equal(lastVisible.begin(),lastVisible.end(),newVisible.begin()))
-		thePlot->resetChange();
-	else
-		lastVisible.swap(newVisible);
-
 	//Copy the plot's memory buffer into a wxImage object, then draw it	
 #ifdef USE_MGL2
 	char *rgbdata = (char*)malloc(w*h*3);
@@ -570,6 +549,11 @@ void MathGLPane::mouseDoubleLeftClick(wxMouseEvent& event)
 	Refresh();
 }
 
+void MathGLPane::mouseDoubleMiddleClick(wxMouseEvent &event)
+{
+	mouseDoubleLeftClick(event);
+}
+
 
 void MathGLPane::oneDMouseDownAction(bool leftDown,bool middleDown,
 		 bool alternateDown, int dragX,int dragY)
@@ -798,6 +782,9 @@ void MathGLPane::leftMouseReleased(wxMouseEvent& event)
 	if(!readyForInput())
 		return;
 
+	//!Do we have region updates?
+	bool haveUpdates=false;
+	
 	switch(mouseDragMode)
 	{
 		case MOUSE_MODE_DRAG:
@@ -814,10 +801,13 @@ void MathGLPane::leftMouseReleased(wxMouseEvent& event)
 				//we need to tell viscontrol that we have done a region
 				//update
 				mglPoint mglCurMouse= gr->CalcXYZ(curMouse.x,curMouse.y);
+				lastEditedRegion=startMouseRegion;
+				lastEditedPlot=startMousePlot;
 			
 				//Send the movement to the parent filter
-				thePlot->moveRegion(startMousePlot,
-					startMouseRegion,regionMoveType,mglCurMouse.x,mglCurMouse.y);	
+				thePlot->moveRegion(startMousePlot,startMouseRegion,
+							regionSelfUpdate,regionMoveType,
+								mglCurMouse.x,mglCurMouse.y);	
 				haveUpdates=true;	
 
 			}
@@ -828,8 +818,25 @@ void MathGLPane::leftMouseReleased(wxMouseEvent& event)
 		;
 	}
 
+
+
+
 	mouseDragMode=MOUSE_MODE_ENUM_END;
 	Refresh();
+	
+	if(haveUpdates)
+	{
+		for(size_t ui=0;ui<updateHandlers.size(); ui++)
+		{
+			pair<wxWindow*,UpdateHandler> u;
+			u=updateHandlers[ui];
+
+			//Call the function
+			UpdateHandler h = u.second;
+			wxWindow *w=u.first;
+			(w->*h)();
+		}
+	}
 }
 
 void MathGLPane::middleMouseReleased(wxMouseEvent& event)
@@ -1249,8 +1256,9 @@ void MathGLPane::drawRegionDraggingOverlay(wxDC *dc) const
 	float regionLimitX,regionLimitY;
 	regionLimitX=mglCurMouse.x;
 	regionLimitY=mglCurMouse.y;
+
 	//See where extending the region is allowed up to.
-	thePlot->moveRegionLimit(startMousePlot,startMouseRegion,
+	thePlot->findRegionLimit(startMousePlot,startMouseRegion,
 					regionMoveType, regionLimitX,regionLimitY);
 	
 	int deltaDrag;
diff --git a/src/gui/mathglPane.h b/src/gui/mathglPane.h
index 60fc381..16e8f9f 100644
--- a/src/gui/mathglPane.h
+++ b/src/gui/mathglPane.h
@@ -41,8 +41,13 @@ enum
 };
 
 
+typedef int (wxWindow::*UpdateHandler)(); 
+
 class MathGLPane: public wxPanel {
 private:
+	
+	vector<pair<wxWindow*,UpdateHandler> > updateHandlers;
+
 	//Current mouse position
 	wxPoint curMouse;
 	//!Has the mouse left the window?
@@ -52,6 +57,9 @@ private:
 	//!What is the user currently doing with the mouse?
 	unsigned int mouseDragMode;
 
+	//Last region that was interacted with
+	size_t lastEditedRegion,lastEditedPlot;
+
 	//!Has the window resized since the last draw?
 	bool hasResized;
 	//!Start and currentlocations for the drag
@@ -62,8 +70,6 @@ private:
 	//!region used at mouse down
 	unsigned int startMouseRegion,startMousePlot,regionMoveType;
 
-	//!Do we have region updates?
-	bool haveUpdates;
 
 	//!Should we be limiting interaction to 
 	//things that won't modify filters (eg region dragging)
@@ -71,8 +77,13 @@ private:
 
 	//!Pointer to the plot data holding class
 	PlotWrapper *thePlot;
-	//!Pointer to the listbox that is used for plot selection
-	wxListBox *plotSelList;
+	
+	//!Should we take ownership of deleting the plot pointer
+	bool ownPlotPtr;
+
+	//!True if regions should update themselves
+	bool regionSelfUpdate;
+
 	//!Pointer to the mathgl renderer
 #ifdef USE_MGL2
 	mglGraph *gr;	
@@ -113,13 +124,15 @@ public:
 	MathGLPane(wxWindow* parent, int id);
 	virtual ~MathGLPane();
 
+	void setVisibleItems(std::vector<bool> &newVisible) ;
+
 	//Set the plot pointer for this class to manipulate
-	void setPlotWrapper(PlotWrapper *plots);
-	//!Set the plot listbox for this class to use
-	void setPlotList(wxListBox *box){plotSelList=box;};
+	void setPlotWrapper(PlotWrapper *plots, bool takeOwnPtr=true);
 
 	std::string getErrString(unsigned int code); 
 
+	void enableRegionSelfUpdate(bool enable) { regionSelfUpdate=enable;}
+
 	//save an SVG file
 	unsigned int saveSVG(const std::string &filename);
 	//Save a PNG file
@@ -132,10 +145,11 @@ public:
 	//numeric_limits<unsigned int>::max() if nothing.
 	bool getRegionUnderCursor(const wxPoint &mousePos, unsigned int &plotId, unsigned int &regionId) const;
 
-	//!Do we have updates?
-	bool hasUpdates() const { return haveUpdates;}
-	//Instruct the plot that we no loger have updates available.
-	void clearUpdates() { haveUpdates=false;}
+	//Returns the ID of the last edited region
+	void getLastEdited(size_t &lastPlot,size_t &lastRegion) const { lastRegion=lastEditedRegion; lastPlot=lastEditedPlot;};
+	//Add a callback for the given window that will be called when the panel needs updating
+	void registerUpdateHandler(wxWindow *w, UpdateHandler handler) { updateHandlers.push_back(make_pair(w,handler));};
+
 	//Resize event for window
 	void resized(wxSizeEvent& evt);
 	//Draw window event
@@ -148,6 +162,8 @@ public:
 	void leftMouseDown(wxMouseEvent& event);
 	//Mouse doubleclick on window
 	void mouseDoubleLeftClick(wxMouseEvent& event);
+	//Mouse doubleclick on window
+	void mouseDoubleMiddleClick(wxMouseEvent& event);
 	//Mousewheel Scroll event
 	void mouseWheelMoved(wxMouseEvent& event);
 	//Button being released inside box
diff --git a/src/testing.cpp b/src/testing/filtertesting.cpp
similarity index 53%
copy from src/testing.cpp
copy to src/testing/filtertesting.cpp
index 7f7ee63..eaae3d8 100644
--- a/src/testing.cpp
+++ b/src/testing/filtertesting.cpp
@@ -1,5 +1,5 @@
 /*
- *	testing.cpp - unit testing implementation
+ *	filtertesting.cpp - unit testing implementation for filter code
  *	Copyright (C) 2013, D Haley 
 
  *	This program is free software: you can redistribute it and/or modify
@@ -16,51 +16,43 @@
  *	along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-
-#include "testing.h"
-#ifdef DEBUG
-#include <wx/filename.h>
-#include <wx/dir.h>
-
-#include "wxcommon.h"
-
-
-#include "backend/filters/allFilter.h"
-#include "backend/configFile.h"
-
-
-#include "common/stringFuncs.h"
-#include "common/xmlHelper.h"
-
-
-const char *TESTING_RESOURCE_DIRS[] = {
-		"../test/",
-		"./test/"
-};
-
 //!Run each filter through its own unit test function
 bool filterTests();
 //!Try cloning the filter from itself, and checking the filter
 // clone is identical
 bool filterCloneTests();
 
-//!Try loading each range file in the testing folder
-bool rangeFileLoadTests();
-
-//!Some elementary function testing
-bool basicFunctionTests() ;
-
-//!Run a few checks on our XML helper functions
-bool XMLTests();
-
 //!basic filter tree topology tests
 bool filterTreeTests();
 
+//Test for bug present in 7199bb83f0ac (internal),
+// whereby Pos -> External -> Box would produce output, even if
+// external did nothing
+// Bug was due to incorrect handling of refresh input data stack
+bool filterRefreshNoOut();
+
+//!Test a given filter tree that the refresh works
+bool testFilterTree(const FilterTree &f);
+
+//!Test a given filter tree that the refresh is successful,
+// then return the output. Must delete output with safeDeleteFilterList
+bool testFilterTree(const FilterTree &f,
+	std::list<std::pair<Filter *, std::vector<const FilterStreamData * > > > &outData ) ;
 
 bool testFilterTree(const FilterTree &f)
 {
-	ASSERT(!f.hasHazardousContents());
 	std::list<std::pair<Filter *, std::vector<const FilterStreamData * > > > outData;
+
+	testFilterTree(f,outData);	
+	
+	f.safeDeleteFilterList(outData);
+
+	return true;
+}
+
+bool testFilterTree(const FilterTree &f,
+	std::list<std::pair<Filter *, std::vector<const FilterStreamData * > > > &outData )
+{
 	std::vector<SelectionDevice *> devices;
 	std::vector<std::pair<const Filter *, string > > consoleMessages;
 
@@ -101,86 +93,6 @@ bool testFilterTree(const FilterTree &f)
 	return true;
 }
 
-
-bool basicFunctionTests()
-{
-	testStringFuncs();
-
-	//Test point parsing routines
-	{
-	std::string testStr;
-	testStr="0.0,1.0,1";
-	Point3D p;
-	bool res=p.parse(testStr);
-	ASSERT(res);
-	ASSERT(p.sqrDist(Point3D(0,1,1)) < 0.1f);
-
-
-	//test case causes segfault : found 30/9/12
-	testStr="0,0,,";
-	res=p.parse(testStr);
-	ASSERT(!res);
-
-	testStr="(0,0,0)";
-	res=p.parse(testStr);
-	ASSERT(res);
-	ASSERT(p.sqrDist(Point3D(0,0,0))<0.01f);
-
-	}
-
-	//Test some basics routines
-	{
-	TEST(rangesOverlap(0,3,1,2),"Overlap test a contain b");
-	TEST(rangesOverlap(1,2,0,3),"Overlap test b contain a");
-	TEST(rangesOverlap(0,2,1,3),"Overlap test a partial b (low)");
-	TEST(rangesOverlap(1,3,0,2),"Overlap test b partial a (high)");
-	TEST(rangesOverlap(2,3,1,4),"Overlap test a partial b (high)");
-	TEST(rangesOverlap(1,3,2,4),"Overlap test b partial a (low)");
-	TEST(!rangesOverlap(1,2,3,4),"Overlap test");
-	TEST(!rangesOverlap(3,4,1,2),"Overlap test");
-	}
-
-	//Test the LFSR to a small extent (first 16 table entries)
-	// -test is brute-force so we can't test much more without being slow
-	LinearFeedbackShiftReg reg;
-	TEST(reg.verifyTable(16),"Check LFSR table integrity");
-
-	
-	return true;
-}
-
-bool runUnitTests()
-{
-
-	cerr << "Running unit tests..." ;
-
-	if(!filterTests())
-		return false;
-
-	if(!filterCloneTests())
-		return false;
-
-	if(!rangeFileLoadTests())
-		return false;
-
-
-	if(!basicFunctionTests())
-		return false;
-	
-	if(!XMLTests())
-		return false;
-
-	if(!filterTreeTests())
-		return false;
-
-	if(!runVoxelTests())
-		return false;
-
-	cerr << " OK" << endl << endl;
-
-	return true;
-}
-
 bool filterTests()
 {
 	//Instantiate various filters, then run their unit tests
@@ -200,6 +112,15 @@ bool filterTests()
 	if(!Filter::helpStringTests())
 		return false;
 
+	if(!filterRefreshNoOut())
+		return false;
+
+	if(!filterCloneTests())
+		return false;
+	
+	if(!filterTreeTests())
+		return false;
+
 	return true;
 }
 
@@ -309,7 +230,7 @@ bool filterCloneTests()
 			}
 
 			//Open the XML file
-			doc = xmlCtxtReadFile(context, sClone.c_str(), NULL,0);
+			doc = xmlCtxtReadFile(context, sClone.c_str(), NULL,XML_PARSE_NONET|XML_PARSE_NOENT);
 
 			//release the context
 			xmlFreeParserCtxt(context);
@@ -346,215 +267,6 @@ bool filterCloneTests()
 	return true;
 }
 
-bool rangeFileLoadTests()
-{
-	//try to load all rng, rrng, and env files in ../tests or ./tests/
-	//whichever is first. 
-	wxString testDir;
-	bool haveDir=false;
-	for(unsigned int ui=0;ui<THREEDEP_ARRAYSIZE(TESTING_RESOURCE_DIRS);ui++)
-	{
-		testDir=wxCStr(TESTING_RESOURCE_DIRS[ui]);
-		if(wxDirExists(testDir))
-		{
-			haveDir=true;
-			break;
-		}
-	}
-
-	if(!haveDir)
-	{
-		WARN(false,"Unable to locate testing resource dir, unable to perform some tests");
-		return true;
-	}
-
-	testDir=testDir+wxT("rangefiles/");
-
-	wxArrayString arrayStr,tmpArr;
-	//Get all the files matching rng extensions
-	vector<string> rangeExts;
-	RangeFile::getAllExts(rangeExts);
-	for(unsigned int ui=0;ui<rangeExts.size();ui++)
-	{
-		std::string tmp;
-		tmp = std::string("*.") + rangeExts[ui];
-		
-		wxDir::GetAllFiles(testDir,&tmpArr,wxStr(tmp));
-		for(unsigned int uj=0;uj<tmpArr.GetCount();uj++)
-			arrayStr.Add(tmpArr[uj]);
-		tmpArr.clear();
-	}
-
-	if(!arrayStr.GetCount())
-	{
-		WARN(false,"Unable to locate test range files, unable to perform some tests");
-		return true;
-	}
-
-
-	//Map names of file (without dir) to number of ions/range
-	map<string,unsigned int> ionCountMap;
-	map<string,unsigned int> rangeCountMap;
-	//set that contains list of entries that should fail
-	set<string> failSet;
-
-	ionCountMap["test1.rng"]=10; rangeCountMap["test1.rng"]=6;
-	ionCountMap["test2.rng"]=7; rangeCountMap["test2.rng"]=9; 
-	ionCountMap["test3.rng"]=19; rangeCountMap["test3.rng"]=59;
-	failSet.insert("test4.rng");
-	ionCountMap["test5.rng"]=4; rangeCountMap["test5.rng"]=2;
-	//After discussion with a sub-author of 
-	// "Atom Probe Microscopy". ISBN 1461434351
-	// and author of the RNG entry in the book,
-	// it was agreed that the file shown in the book is invalid.
-	// Multiple ions cannot be assigned in this fashion,
-	// as there is no naming or colour data to match to
-	failSet.insert("test6.rng");
-	ionCountMap["test7.rng"]=2; rangeCountMap["test7.rng"]=2;
-	ionCountMap["test8.rng"]=2; rangeCountMap["test8.rng"]=2;
-	ionCountMap["test9.rng"]=3; rangeCountMap["test9.rng"]=3;
-	ionCountMap["test10.rng"]=3; rangeCountMap["test10.rng"]=3;
-	ionCountMap["test11.rng"]=5; rangeCountMap["test11.rng"]=10;
-	ionCountMap["test12.rng"]=5; rangeCountMap["test12.rng"]=10;
-
-	ionCountMap["test1.rrng"]=1; rangeCountMap["test1.rrng"]=1;
-	ionCountMap["test2.rrng"]=3; rangeCountMap["test2.rrng"]=6; 
-	ionCountMap["test3.rrng"]=8; rangeCountMap["test3.rrng"]=42; 
-	ionCountMap["test4.rrng"]=14; rangeCountMap["test4.rrng"]=15; 
-	ionCountMap["test5.rrng"]=1; rangeCountMap["test5.rrng"]=1; 
-	
-	ionCountMap["test1.env"]=1; rangeCountMap["test1.env"]=1; 
-
-	//Sort the array before we go any further, so that the output
-	//each time is the same, regardless of how the files were
-	//loaded into the dir. F.ex this makes diffing easier
-	arrayStr.Sort();
-	//Now, check to see if each file is in fact a valid, loadable range file
-	for(unsigned int ui=0;ui<arrayStr.GetCount();ui++)
-	{
-		std::string fileLongname, fileShortname;
-		fileLongname=stlStr(arrayStr[ui]);
-
-		wxFileName filename;
-		filename=wxStr(fileLongname);
-		//This returns the short name of the file. Yes, its badly named.
-		fileShortname=stlStr(filename.GetFullName());
-		{
-			RangeFile f;
-
-			bool shouldSucceed;
-
-			//check to see if we have a failure entry for this rangefile
-			// if its not in the set, it should load successfully
-			shouldSucceed=(failSet.find(fileShortname)==failSet.end());
-				
-			if(!(f.openGuessFormat(fileLongname.c_str()) == shouldSucceed))
-			{
-				cerr << "\t" << fileShortname.c_str() << "...";
-				cerr << f.getErrString() << endl;
-				TEST(false,"range file load test"); 
-			}
-
-
-			if(!shouldSucceed)
-				continue;
-
-			//Check against the hand-made map of ion and range counts
-			if(ionCountMap.find(fileShortname)!=ionCountMap.end())
-			{
-				std::string errMsg;
-				errMsg=string("ion count test : ") + fileShortname;
-				TEST(ionCountMap[fileShortname] == f.getNumIons(),errMsg.c_str());
-			}
-			else
-			{
-				cerr << "\t" << fileShortname.c_str() << "...";
-				WARN(false,"Did not know how many ions file was supposed to have. Test inconclusive");
-			}
-			
-			if(rangeCountMap.find(fileShortname)!=rangeCountMap.end())
-			{
-				std::string errMsg;
-				errMsg=string("range count test : ") + fileShortname;
-				TEST(rangeCountMap[fileShortname] == f.getNumRanges(),errMsg.c_str());
-			}
-			else
-			{
-				cerr << "\t" << fileShortname.c_str() << "...";
-				WARN(false,"Did not know how many ranges file was supposed to have. Test inconclusive");
-			}
-		}
-	}
-
-
-
-	map<string,int> typeMapping;
-
-	typeMapping["test1.rng"]=RANGE_FORMAT_ORNL;
-	typeMapping["test2.rng"]=RANGE_FORMAT_ORNL; 
-	typeMapping["test3.rng"]=RANGE_FORMAT_ORNL;
-	typeMapping["test5.rng"]=RANGE_FORMAT_ORNL; 
-	typeMapping["test7.rng"]=RANGE_FORMAT_ORNL; 
-	typeMapping["test8.rng"]=RANGE_FORMAT_ORNL; 
-	typeMapping["test9.rng"]=RANGE_FORMAT_ORNL; 
-	typeMapping["test10.rng"]=RANGE_FORMAT_ORNL;
-	typeMapping["test11.rng"]=RANGE_FORMAT_ORNL;
-	typeMapping["test12.rng"]=RANGE_FORMAT_DBL_ORNL; 
-	typeMapping["test1.rrng"]=RANGE_FORMAT_RRNG;
-	typeMapping["test2.rrng"]=RANGE_FORMAT_RRNG;
-	typeMapping["test3.rrng"]=RANGE_FORMAT_RRNG;
-	typeMapping["test4.rrng"]=RANGE_FORMAT_RRNG;
-	typeMapping["test5.rrng"]=RANGE_FORMAT_RRNG;
-	typeMapping["test1.env"]=RANGE_FORMAT_ENV; 
-
-
-	for(unsigned int ui=0;ui<arrayStr.GetCount();ui++)
-	{
-		std::string fileLongname, fileShortname;
-		wxFileName filename;
-		
-		fileLongname=stlStr(arrayStr[ui]);
-		filename=wxStr(fileLongname);
-		fileShortname=stlStr(filename.GetFullName());
-
-		//Check to see that the auto-parser correctly identifies the type
-		if(typeMapping.find(fileShortname) != typeMapping.end())
-		{
-			std::string errString;
-			errString="Range type detection : ";
-			errString+=fileLongname;
-
-			if(!wxFileExists(wxStr(fileLongname)))
-			{
-				cerr << "File expected, but not found during test:" <<
-					fileLongname << endl;
-				continue;
-			}
-			
-
-			TEST(RangeFile::detectFileType(fileLongname.c_str()) == 
-					typeMapping[fileShortname], errString);
-		}
-	}
-	return true;
-}
-
-bool XMLTests()
-{
-	vector<std::string> v;
-	v.push_back("<A & B>");
-	v.push_back(" \"\'&<>;");
-	v.push_back("&");
-
-
-	for(unsigned int ui=0;ui<v.size();ui++)
-	{
-		TEST(unescapeXML(escapeXML(v[ui])) == v[ui],"XML unescape round-trip test");
-	}
-
-	return true;
-}
-
 bool filterTreeTests()
 {
 	FilterTree fTree;
@@ -695,7 +407,7 @@ bool filterTreeTests()
 			}
 
 			//Open the XML file
-			doc = xmlCtxtReadFile(context, tmpName.c_str(), NULL,0);
+			doc = xmlCtxtReadFile(context, tmpName.c_str(), NULL,XML_PARSE_NONET|XML_PARSE_NOENT);
 
 			if(!doc)
 				throw false;
@@ -735,5 +447,62 @@ bool filterTreeTests()
 }
 
 
+bool filterRefreshNoOut()
+{
 
-#endif
+
+	//Create a file with some data in it
+	string strData;
+
+	wxString wxs,tmpStr;
+	tmpStr=wxT("3Depict-unit-test-");
+	wxs= wxFileName::CreateTempFileName(tmpStr);
+	tmpStr = tmpStr + wxs;
+
+	strData=stlStr(wxs) + string(".txt");
+
+	//Create a text file with some dummy data
+	{
+	ofstream f(strData.c_str());
+
+	if(!f)
+	{
+		WARN(false,"Unable to write to dir, skipped unit test");
+		return true;
+	}
+
+	//Write out some useable data
+	f << "1 2 3 4" << std::endl;
+	f << "2 1 3 5" << std::endl;
+	f << "3 2 1 6" << std::endl;
+	f.close();
+	}
+
+	DataLoadFilter *fData = new DataLoadFilter;
+	Filter *fB = new ExternalProgramFilter;
+	Filter *fC = new IonDownsampleFilter;
+
+	//Set the data load filter
+	fData->setFilename(strData);
+	fData->setFileMode(DATALOAD_TEXT_FILE);
+
+	bool needUp;
+
+	TEST(fB->setProperty(EXTERNALPROGRAM_KEY_COMMAND,"",needUp),"set prop");
+	
+	FilterTree fTree;
+	fTree.addFilter(fData,0);
+	fTree.addFilter(fB,fData);
+	fTree.addFilter(fC,fB);
+
+
+	std::list<std::pair<Filter *, std::vector<const FilterStreamData * > > > outData;
+	TEST(testFilterTree(fTree,outData),"ext program tree test");
+
+	TEST(outData.empty(),"External program refresh test");
+	fTree.safeDeleteFilterList(outData);
+
+	wxRemoveFile(wxStr(strData));
+
+	return true;
+}
diff --git a/src/testing.cpp b/src/testing/testing.cpp
similarity index 50%
rename from src/testing.cpp
rename to src/testing/testing.cpp
index 7f7ee63..169ffb4 100644
--- a/src/testing.cpp
+++ b/src/testing/testing.cpp
@@ -22,12 +22,14 @@
 #include <wx/filename.h>
 #include <wx/dir.h>
 
-#include "wxcommon.h"
+#include "wx/wxcommon.h"
 
 
 #include "backend/filters/allFilter.h"
+#include "backend/state.h"
 #include "backend/configFile.h"
-
+#include "backend/filters/algorithms/binomial.h"
+#include "backend/APT/ionhit.h"
 
 #include "common/stringFuncs.h"
 #include "common/xmlHelper.h"
@@ -38,11 +40,8 @@ const char *TESTING_RESOURCE_DIRS[] = {
 		"./test/"
 };
 
-//!Run each filter through its own unit test function
-bool filterTests();
-//!Try cloning the filter from itself, and checking the filter
-// clone is identical
-bool filterCloneTests();
+#include "filtertesting.cpp"
+
 
 //!Try loading each range file in the testing folder
 bool rangeFileLoadTests();
@@ -53,54 +52,6 @@ bool basicFunctionTests() ;
 //!Run a few checks on our XML helper functions
 bool XMLTests();
 
-//!basic filter tree topology tests
-bool filterTreeTests();
-
-
-bool testFilterTree(const FilterTree &f)
-{
-	ASSERT(!f.hasHazardousContents());
-	std::list<std::pair<Filter *, std::vector<const FilterStreamData * > > > outData;
-	std::vector<SelectionDevice *> devices;
-	std::vector<std::pair<const Filter *, string > > consoleMessages;
-
-	ProgressData prog;
-	if(f.refreshFilterTree(outData,devices,consoleMessages,prog,dummyCallback))
-	{
-		f.safeDeleteFilterList(outData);
-		return false;
-	}
-
-
-	typedef std::pair<Filter *, std::vector<const FilterStreamData * > > FILTER_PAIR;
-
-	for(list<FILTER_PAIR>::iterator it=outData.begin();
-			it!=outData.end();++it)
-	{
-		cerr << it->first->getUserString() << ":" << endl;
-		for(size_t ui=0;ui<it->second.size();ui++)
-		{
-			size_t streamType;
-			streamType=ilog2(it->second[ui]->getStreamType());
-			ASSERT(streamType<NUM_STREAM_TYPES);
-
-
-
-			//Print out the stream name, and the number of objects it contains
-			cerr << "\t" << STREAM_NAMES[streamType] << " " <<
-				"\t" << it->second[ui]->getNumBasicObjects() << endl;
-		}
-	}
-
-
-	//TODO: report on Xml contents
-	
-	
-	f.safeDeleteFilterList(outData);
-
-	return true;
-}
-
 
 bool basicFunctionTests()
 {
@@ -154,6 +105,10 @@ bool runUnitTests()
 
 	cerr << "Running unit tests..." ;
 
+
+	if(!testIonHit())
+		return false;
+
 	if(!filterTests())
 		return false;
 
@@ -176,173 +131,14 @@ bool runUnitTests()
 	if(!runVoxelTests())
 		return false;
 
-	cerr << " OK" << endl << endl;
-
-	return true;
-}
-
-bool filterTests()
-{
-	//Instantiate various filters, then run their unit tests
-	for(unsigned int ui=0; ui<FILTER_TYPE_ENUM_END; ui++)
-	{
-		Filter *f;
-	       	f= makeFilter(ui);
-		if(!f->runUnitTests())
-			return false;
-
-		delete f;
-	}
-
-	if(!Filter::boolToggleTests())
+	if(!testBinomial())
 		return false;
 
-	if(!Filter::helpStringTests())
+	if(!runStateTests())
 		return false;
 
-	return true;
-}
-
-bool filterCloneTests()
-{
-	//Run the clone/uncloned versions of filter write functions
-	//against each other and ensure
-	//that their XML output is the same. Then check against
-	//the read function.
-	//
-	// Without a user config file (with altered defaults), this is not a
-	// "strong" test, as nothing is being altered   inside the filter after 
-	// instantiation in the default case -- stuff can still be missed 
-	// in the cloneUncached, and won't be detected, but it does prevent cross-wiring. 
-	//
-	ConfigFile configFile;
-    	configFile.read();
-	
-	bool fileWarn=false;
-	for(unsigned int ui=0; ui<FILTER_TYPE_ENUM_END; ui++)
-	{
-		//Get the user's preferred, or the program
-		//default filter.
-		Filter *f = configFile.getDefaultFilter(ui);
-		
-		//now attempt to clone the filter, and write both XML outputs.
-		Filter *g;
-		g=f->cloneUncached();
-
-		//create the files
-		string sOrig,sClone;
-		{
-
-			wxString wxs,tmpStr;
-
-			tmpStr=wxT("3Depict-unit-test-a");
-			tmpStr=tmpStr+wxStr(f->getUserString());
-			
-			wxs= wxFileName::CreateTempFileName(tmpStr);
-			sOrig=stlStr(wxs);
-		
-			//write out one file from original object	
-			ofstream fileOut(sOrig.c_str());
-			if(!fileOut)
-			{
-				//Run a warning, but only once.
-				WARN(fileWarn,"unable to open output xml file for xml test");
-				fileWarn=true;
-			}
-
-			f->writeState(fileOut,STATE_FORMAT_XML);
-			fileOut.close();
-
-			//write out file from cloned object
-			tmpStr=wxT("3Depict-unit-test-b");
-			tmpStr=tmpStr+wxStr(f->getUserString());
-			wxs= wxFileName::CreateTempFileName(tmpStr);
-			sClone=stlStr(wxs);
-			fileOut.open(sClone.c_str());
-			if(!fileOut)
-			{
-				//Run a warning, but only once.
-				WARN(fileWarn,"unable to open output xml file for xml test");
-				fileWarn=true;
-			}
-
-			g->writeState(fileOut,STATE_FORMAT_XML);
-			fileOut.close();
-
-
-
-		}
-
-		//Now run diff
-		//------------
-		string command;
-		command = string("diff \'") +  sOrig + "\' \'" + sClone + "\'";
-
-		wxArrayString stdOut;
-		long res;
-#if wxCHECK_VERSION(2,9,0)
-		res=wxExecute(wxStr(command),stdOut, wxEXEC_BLOCK);
-#else
-		res=wxExecute(wxStr(command),stdOut);
-#endif
-
-
-		string comment = f->getUserString() + string(" Orig: ")+ sOrig + string (" Clone:") +sClone+
-			string("Cloned filter output was different... (or diff not around?)");
-		TEST(res==0,comment.c_str());
-		//-----------
-	
-		//Check both files are valid XML
-		TEST(isValidXML(sOrig.c_str()) ==true,"XML output of filter not valid...");	
-
-		//Now, try to re-read the XML, and get back the filter,
-		//then write it out again.
-		//---
-		{
-			xmlDocPtr doc;
-			xmlParserCtxtPtr context;
-			context =xmlNewParserCtxt();
-			if(!context)
-			{
-				WARN(false,"Failed allocating XML context");
-				return false;
-			}
-
-			//Open the XML file
-			doc = xmlCtxtReadFile(context, sClone.c_str(), NULL,0);
-
-			//release the context
-			xmlFreeParserCtxt(context);
-
-			//retrieve root node	
-			xmlNodePtr nodePtr = xmlDocGetRootElement(doc);
-
-			//Read the state file, then re-write it!
-			g->readState(nodePtr);
-
-			xmlFreeDoc(doc);
-
-			ofstream fileOut(sClone.c_str());
-			g->writeState(fileOut,STATE_FORMAT_XML);
-
-			//Re-run diff
-#if wxCHECK_VERSION(2,9,0)
-			res=wxExecute(wxStr(command),stdOut, wxEXEC_BLOCK);
-#else
-			res=wxExecute(wxStr(command),stdOut);
-#endif
-			comment = f->getUserString() + string("Orig: ")+ sOrig + string (" Clone:") +sClone+
-				string("Read-back filter output was different... (or diff not around?)");
-			TEST(res==0,comment.c_str());
-		}
-		//----
-		//clean up
-		wxRemoveFile(wxStr(sOrig));
-		wxRemoveFile(wxStr(sClone));
+	cerr << " OK" << endl << endl;
 
-		delete f;
-		delete g;
-	}
 	return true;
 }
 
@@ -422,6 +218,7 @@ bool rangeFileLoadTests()
 	ionCountMap["test3.rrng"]=8; rangeCountMap["test3.rrng"]=42; 
 	ionCountMap["test4.rrng"]=14; rangeCountMap["test4.rrng"]=15; 
 	ionCountMap["test5.rrng"]=1; rangeCountMap["test5.rrng"]=1; 
+	ionCountMap["test6.rrng"]=2; rangeCountMap["test6.rrng"]=4; 
 	
 	ionCountMap["test1.env"]=1; rangeCountMap["test1.env"]=1; 
 
@@ -505,6 +302,7 @@ bool rangeFileLoadTests()
 	typeMapping["test3.rrng"]=RANGE_FORMAT_RRNG;
 	typeMapping["test4.rrng"]=RANGE_FORMAT_RRNG;
 	typeMapping["test5.rrng"]=RANGE_FORMAT_RRNG;
+	typeMapping["test6.rrng"]=RANGE_FORMAT_RRNG;
 	typeMapping["test1.env"]=RANGE_FORMAT_ENV; 
 
 
@@ -555,185 +353,6 @@ bool XMLTests()
 	return true;
 }
 
-bool filterTreeTests()
-{
-	FilterTree fTree;
-
-
-	Filter *fA = new IonDownsampleFilter;
-	Filter *fB = new IonDownsampleFilter;
-	Filter *fC = new IonDownsampleFilter;
-	Filter *fD = new IonDownsampleFilter;
-	//Tree layout:
-	//A
-	//-> B
-	//  -> D
-	//-> C
-	fTree.addFilter(fA,0);
-	fTree.addFilter(fB,fA);
-	fTree.addFilter(fC,fA);
-	fTree.addFilter(fD,fB);
-	TEST(fTree.size() == 4,"Tree construction");
-	TEST(fTree.maxDepth() == 2, "Tree construction");
-
-	
-	//Copy B's child to B.
-	//A
-	//-> B
-	//  -> D
-	//  -> E
-	//-> C
-	size_t oldSize;
-	oldSize=fTree.size();
-	TEST(fTree.copyFilter(fD,fB),"copy test");
-	TEST(oldSize+1 == fTree.size(), "copy test");
-	TEST(fTree.maxDepth() == 2, " copy test");
-
-	//Remove B from tree
-	fTree.removeSubtree(fB);
-	TEST(fTree.size() == 2, "subtree remove test");
-	TEST(fTree.maxDepth() == 1, "subtree remove test");
-
-	fTree.clear();
-
-	Filter *f[4];
-	f[0] = new IonDownsampleFilter;
-	f[1] = new IonDownsampleFilter;
-	f[2] = new IonDownsampleFilter;
-	f[3] = new IonDownsampleFilter;
-
-	for(unsigned int ui=0;ui<4;ui++)
-	{
-		std::string s;
-		stream_cast(s,ui);
-		f[ui]->setUserString(s);
-	}
-
-	//build a new tree arrangement
-	//0
-	// ->3
-	//1
-	// ->2
-	fTree.addFilter(f[0],0);
-	fTree.addFilter(f[1],0);
-	fTree.addFilter(f[2],f[1]);
-	fTree.addFilter(f[3],f[0]);
-
-	fTree.reparentFilter(f[1],f[3]);
-
-	//Now :
-	// 0
-	//   ->3
-	//       ->1
-	//          ->2
-	TEST(fTree.size() == 4,"reparent test")
-	TEST(fTree.maxDepth() == 3, "reparent test");
-	for(unsigned int ui=0;ui<4;ui++)
-	{
-		TEST(fTree.contains(f[ui]),"reparent test");
-	}
-
-	FilterTree fSpareTree=fTree;
-	fTree.addFilterTree(fSpareTree,f[2]);
-
-
-	TEST(fTree.maxDepth() == 7,"reparent test");
-
-	//Test the swap function
-	FilterTree fTmp;
-	fTmp=fTree;
-	//swap spare with working
-	fTree.swap(fSpareTree);
-	//spare should now be the same size as the original working
-	TEST(fSpareTree.maxDepth() == fTmp.maxDepth(),"filtertree swap");
-	//swap working back
-	fTree.swap(fSpareTree);
-	TEST(fTree.maxDepth() == fTmp.maxDepth(),"filtertree swap");
-
-
-	bool needUp;
-	ASSERT(fTree.setFilterProperty(f[0],KEY_IONDOWNSAMPLE_FRACTION,"0.5",needUp)
-	 || fTree.setFilterProperty(f[0],KEY_IONDOWNSAMPLE_COUNT,"10",needUp));
-
-	std::string tmpName;
-	if(!genRandomFilename(tmpName) )
-	{
-		//Build an XML file containing the filter tree
-		// then try to load it
-		try
-		{
-			//Create an XML file
-			std::ofstream tmpFile(tmpName.c_str());
-
-			if(!tmpFile)
-				throw false;
-			tmpFile << "<testXML>" << endl;
-			//Dump tree contents into XML file
-			std::map<string,string> dummyMap;
-			if(fTree.saveXML(tmpFile,dummyMap,false,true))
-			{
-				tmpFile<< "</testXML>" << endl;
-			}
-			else
-			{
-			WARN(true,"Unable to write to random file in current folder. skipping test");
-			}
-		
-
-			//Reparse tree
-			//---
-			xmlDocPtr doc;
-			xmlParserCtxtPtr context;
-
-			context =xmlNewParserCtxt();
-
-
-			if(!context)
-			{
-				cout << "Failed to allocate parser" << std::endl;
-				throw false;
-			}
-
-			//Open the XML file
-			doc = xmlCtxtReadFile(context, tmpName.c_str(), NULL,0);
-
-			if(!doc)
-				throw false;
-			
-			//release the context
-			xmlFreeParserCtxt(context);
-			//retrieve root node	
-			xmlNodePtr nodePtr = xmlDocGetRootElement(doc);
-			if(!nodePtr)
-				throw false;
-			
-			nodePtr=nodePtr->xmlChildrenNode;
-			if(!nodePtr)
-				throw false;
-
-			//find filtertree data
-			if(XMLHelpFwdToElem(nodePtr,"filtertree"))
-				throw false;
-			
-			TEST(!fTree.loadXML(nodePtr,cerr,""),"Tree load test");
-			//-----
-		}
-		catch(bool)
-		{
-			WARN(false,"Couldn't run XML reparse of output file");
-			wxRemoveFile(wxStr(tmpName));
-			return false;
-		}
-		wxRemoveFile(wxStr(tmpName));
-	}
-	else
-	{
-		WARN(true,"Unable to open random file in current folder. skipping a test");
-	}
-
-	return true;
-}
-
 
 
 #endif
diff --git a/src/testing.h b/src/testing/testing.h
similarity index 100%
rename from src/testing.h
rename to src/testing/testing.h
diff --git a/src/wxcommon.cpp b/src/wx/wxcommon.cpp
similarity index 98%
rename from src/wxcommon.cpp
rename to src/wx/wxcommon.cpp
index 4235cea..ef65b1d 100644
--- a/src/wxcommon.cpp
+++ b/src/wx/wxcommon.cpp
@@ -57,7 +57,7 @@ std::string locateDataFile(const char *name)
 #if defined(WIN32) || defined(WIN64)
 
 	//This must match the key used in the installer
-	wxRegKey *pRegKey = new wxRegKey(_("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\3Depict.exe"));
+	wxRegKey *pRegKey = new wxRegKey(wxT("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\3Depict.exe"));
 
 	if( pRegKey->Exists() )
 	{
@@ -65,7 +65,7 @@ std::string locateDataFile(const char *name)
 		//OK, lets see if this dir actually exists or if we are being lied to (old dead regkey, for example)
 		wxString keyVal;
 		//Get the default key
-		pRegKey->QueryValue(_(""),keyVal);
+		pRegKey->QueryValue(wxT(""),keyVal);
 		//Strip the "3Depict.exe" from the key string
 		std::string s;
 		s = (const char *)keyVal.mb_str();
@@ -398,11 +398,11 @@ bool processMatchesName(size_t processID, const std::string &procName)
 		ULONG ReturnLength;
 		PFN_NT_QUERY_SYSTEM_INFORMATION pfnNtQuerySystemInformation = (PFN_NT_QUERY_SYSTEM_INFORMATION)
 			GetProcAddress (GetModuleHandle(TEXT("ntdll.dll")), "NtQuerySystemInformation");
-		NTSTATUS status;
 
 				
 		//Grab the process ID stuff, expanding the buffer until we can do the job we need.
-		while (TRUE) {
+		while (true) {
+			NTSTATUS status;
 			status = pfnNtQuerySystemInformation (SystemProcessInformation, (PVOID)pspid,
 												  bufferSize, &ReturnLength);
 			if (status == STATUS_SUCCESS)
diff --git a/src/wxcommon.h b/src/wx/wxcommon.h
similarity index 100%
rename from src/wxcommon.h
rename to src/wx/wxcommon.h
diff --git a/src/wxcomponents.cpp b/src/wx/wxcomponents.cpp
similarity index 92%
rename from src/wxcomponents.cpp
rename to src/wx/wxcomponents.cpp
index b0074f5..1e267b0 100644
--- a/src/wxcomponents.cpp
+++ b/src/wx/wxcomponents.cpp
@@ -26,15 +26,10 @@
 
 #include <wx/clipbrd.h>
 
-
 using std::ofstream;
 using std::vector;
 
-#if defined(__APPLE__) || defined(__WIN32__) || defined(__WIN64__)
-const float FONT_HEADING_SCALEFACTOR=1.0f;
-#else
-const float FONT_HEADING_SCALEFACTOR=0.75f;
-#endif
+const float FONT_HEADING_SCALEFACTOR=1.25f;
 
 void upWxTreeCtrl(const FilterTree &filterTree, wxTreeCtrl *t,
 		std::map<size_t,Filter *> &filterMap,vector<const Filter *> &persistentFilters,
@@ -51,6 +46,7 @@ void upWxTreeCtrl(const FilterTree &filterTree, wxTreeCtrl *t,
 	}
 
 	stack<wxTreeItemId> treeIDs;
+	t->Freeze();
 	//Warning: this generates an event, 
 	//most of the time (some windows versions do not according to documentation)
 	t->DeleteAllItems();
@@ -127,6 +123,7 @@ void upWxTreeCtrl(const FilterTree &filterTree, wxTreeCtrl *t,
 	}
 	t->GetParent()->Layout();
 
+	t->Thaw();
 }
 
 //Convert my internal choice string format to wx's
@@ -163,41 +160,45 @@ std::string wxChoiceParamString(std::string choiceString)
 	return retStr;
 }
 
-BEGIN_EVENT_TABLE(wxPropertyGrid, wxGrid)
-	EVT_GRID_CELL_LEFT_CLICK(wxPropertyGrid::OnCellLeftClick )
-	EVT_GRID_LABEL_LEFT_DCLICK(wxPropertyGrid::OnLabelDClick) 
-	EVT_MOTION(wxPropertyGrid::OnMouseMove) 
+BEGIN_EVENT_TABLE(wxCustomPropGrid, wxGrid)
+	EVT_GRID_CELL_LEFT_CLICK(wxCustomPropGrid::OnCellLeftClick )
+	EVT_GRID_LABEL_LEFT_DCLICK(wxCustomPropGrid::OnLabelDClick) 
+	EVT_MOTION(wxCustomPropGrid::OnMouseMove) 
 END_EVENT_TABLE()
 
-wxPropertyGrid::wxPropertyGrid(wxWindow* parent, wxWindowID id, 
+wxCustomPropGrid::wxCustomPropGrid(wxWindow* parent, wxWindowID id, 
 		const wxPoint& pos , const wxSize& size , long style ) :
 					wxGrid(parent, id, pos, size , style)
 {
 	lastGridHoverCol=lastGridHoverRow=-1;
 	//Perform wx event connecting/binding
 #if wxCHECK_VERSION(2, 9, 0)
-	GetGridWindow()->Bind(wxEVT_MOTION, &wxPropertyGrid::OnMouseMove, this);
+	GetGridWindow()->Bind(wxEVT_MOTION, &wxCustomPropGrid::OnMouseMove, this);
 #else
     	GetGridWindow()->Connect(wxID_ANY,
-                 wxEVT_MOTION, wxMouseEventHandler(wxPropertyGrid::OnMouseMove), NULL, this);
+                 wxEVT_MOTION, wxMouseEventHandler(wxCustomPropGrid::OnMouseMove), NULL, this);
 #endif
 }
 
 
-void wxPropertyGrid::setGroupName(unsigned int set, const std::string &name) 
+void wxCustomPropGrid::setGroupName(unsigned int set, const std::string &name) 
 {
 	ASSERT(set < sectionNames.size());
 	sectionNames[set]=name;
 }
 
-void wxPropertyGrid::OnSize(wxSizeEvent &event)
+void wxCustomPropGrid::OnSize(wxSizeEvent &event)
 {
 
 }
 
-void wxPropertyGrid::OnLabelDClick(wxGridEvent &event)
+void wxCustomPropGrid::OnLabelDClick(wxGridEvent &event)
 {
+#if wxCHECK_VERSION(2,9,0)
+	if(!this->GetNumberCols())
+#else
 	if(!this->GetCols())
+#endif
 		return;
 	wxSize s;
 	s=this->GetSize();
@@ -205,7 +206,7 @@ void wxPropertyGrid::OnLabelDClick(wxGridEvent &event)
 	SelectBlock(-1,-1,-1,-1); //Select empty block
 }
 
-void wxPropertyGrid::fitCols(wxSize &size)
+void wxCustomPropGrid::fitCols(wxSize &size)
 {
 	int wc = size.GetWidth()-this->GetScrollThumb(wxVERTICAL)-15;
 	this->SetColSize(1, wc-this->GetColSize(0)); 
@@ -213,10 +214,10 @@ void wxPropertyGrid::fitCols(wxSize &size)
 	Refresh();
 }
 
-wxPropertyGrid::~wxPropertyGrid()
+wxCustomPropGrid::~wxCustomPropGrid()
 {
 #if wxCHECK_VERSION(2, 9, 0)
-   GetGridWindow()->Unbind(wxEVT_MOTION, &wxPropertyGrid::OnMouseMove, this);
+   GetGridWindow()->Unbind(wxEVT_MOTION, &wxCustomPropGrid::OnMouseMove, this);
 #else
    GetGridWindow()->Disconnect();
 #endif
@@ -294,14 +295,14 @@ void wxGridCellChoiceRenderer::Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc
 	}
 }
 
-bool wxPropertyGrid::isSeparatorRow(int row) const
+bool wxCustomPropGrid::isSeparatorRow(int row) const
 {
 	//TODO: Consider moving to map, this does not scale well.
 	// for now we have usually five or six items tho
 	return std::find(sepRows.begin(),sepRows.end(),row)!=sepRows.end();
 }
 
-void wxPropertyGrid::OnMouseMove(wxMouseEvent &event)
+void wxCustomPropGrid::OnMouseMove(wxMouseEvent &event)
 {
 
 	int xPos,yPos;
@@ -325,7 +326,7 @@ void wxPropertyGrid::OnMouseMove(wxMouseEvent &event)
 		//column, then bail out
 		if(isSeparatorRow(row) || row == -1  || col == 1)
 		{
-			SetToolTip(NULL); //Hide the tooltip
+			GetGridWindow()->SetToolTip(NULL); //Hide the tooltip
 			event.Skip();
 			return;
 		}
@@ -334,14 +335,14 @@ void wxPropertyGrid::OnMouseMove(wxMouseEvent &event)
 		const GRID_PROPERTY *p;
 		p=getProperty(getKeyFromRow(row));
 	
-		SetToolTip(wxStr(p->helpText));
+		GetGridWindow()->SetToolTip(wxStr(p->helpText));
 	}
 
 	event.Skip();
 }
 
 //Function adapted from nomadsync.sourceforge.net (GPL)
-void wxPropertyGrid::OnCellLeftClick(wxGridEvent &ev)
+void wxCustomPropGrid::OnCellLeftClick(wxGridEvent &ev)
 {
 	// This forces the cell to go into edit mode directly
 	m_waitForSlowClick = true;
@@ -355,7 +356,7 @@ void wxPropertyGrid::OnCellLeftClick(wxGridEvent &ev)
 	ev.Skip();
 }
 
-void wxPropertyGrid::clear()
+void wxCustomPropGrid::clear()
 {
 	this->BeginBatch();
 	//Empty the grid
@@ -368,16 +369,23 @@ void wxPropertyGrid::clear()
 	propertyKeys.clear();
 	this->EndBatch();
 
-	SetToolTip(wxT(""));
+	GetGridWindow()->SetToolTip(wxT(""));
 	lastGridHoverRow=lastGridHoverCol=-1;
 }
 
-bool wxPropertyGrid::isComboEditing() 
+bool wxCustomPropGrid::isComboEditing() 
 {
-	return IsCellEditControlEnabled() && getTypeFromRow(this->GetCursorRow()) == PROPERTY_TYPE_CHOICE;
+	bool retVal;
+	retVal= IsCellEditControlEnabled();
+#if wxCHECK_VERSION(2,9,0)
+	retVal = retVal &&getTypeFromRow(this->GetGridCursorRow()) == PROPERTY_TYPE_CHOICE;
+#else
+	retVal = retVal && getTypeFromRow(this->GetCursorRow()) == PROPERTY_TYPE_CHOICE;
+#endif
+	return retVal;
 };
 
-unsigned int wxPropertyGrid::getTypeFromRow(int row) const
+unsigned int wxCustomPropGrid::getTypeFromRow(int row) const
 {
 	for(unsigned int ui=0;ui<propertyKeys.size();ui++)
 	{
@@ -393,13 +401,13 @@ unsigned int wxPropertyGrid::getTypeFromRow(int row) const
 	return 0; // Shut gcc up
 }
 
-void  wxPropertyGrid::clearKeys()
+void  wxCustomPropGrid::clearKeys()
 {
 	propertyKeys.clear();
 	sectionNames.clear();
 }
 
-void wxPropertyGrid::addKey(const std::string &name, unsigned int group,
+void wxCustomPropGrid::addKey(const std::string &name, unsigned int group,
 		unsigned int newKey, unsigned int type, const std::string &data,
 		const std::string &helpText)
 {
@@ -414,7 +422,7 @@ void wxPropertyGrid::addKey(const std::string &name, unsigned int group,
 }
 
 //Layout the property vector
-void wxPropertyGrid::propertyLayout()
+void wxCustomPropGrid::propertyLayout()
 {
 	this->BeginBatch();
 
@@ -543,6 +551,7 @@ void wxPropertyGrid::propertyLayout()
 			{
 				this->SetCellValue(sepRows[ui],0,wxStr(sectionNames[ui+1]));
 				wxFont f;
+				f=*wxSMALL_FONT;
 				f.SetStyle(wxFONTSTYLE_ITALIC);
 				f.SetPointSize((int)(f.GetPointSize()*FONT_HEADING_SCALEFACTOR));
 				this->SetCellFont(sepRows[ui],0,f);
@@ -573,7 +582,7 @@ void wxPropertyGrid::propertyLayout()
 	fitCols(s);
 }
 
-unsigned int  wxPropertyGrid::getKeyFromRow(int row) const
+unsigned int  wxCustomPropGrid::getKeyFromRow(int row) const
 {
 	for(unsigned int ui=0;ui<propertyKeys.size();ui++)
 	{
@@ -589,7 +598,7 @@ unsigned int  wxPropertyGrid::getKeyFromRow(int row) const
 	return 0; // Shut gcc up
 }
 
-const GRID_PROPERTY *wxPropertyGrid::getProperty(unsigned int key) const
+const GRID_PROPERTY *wxCustomPropGrid::getProperty(unsigned int key) const
 {
 	for(unsigned int group=0;group<propertyKeys.size();group++)
 	{
@@ -661,8 +670,13 @@ void CopyGrid::saveData()
 
         // Number of rows and cols
         int rows,cols;
+#if wxCHECK_VERSION(2,9,0)
+	rows=GetNumberRows();
+	cols=GetNumberCols();
+#else
 	rows=GetRows();
 	cols=GetCols();
+#endif
         // data variable contain text that must be set in the clipboard
         // For each cell in selected range append the cell value in the data
 	//variable
@@ -771,7 +785,7 @@ void CopyGrid::copyData()
 	{
 		const wxArrayInt& rows(GetSelectedRows());
 		const wxArrayInt& cols(GetSelectedCols());
-		const wxGridCellCoordsArray& cells(GetSelectedCells());
+//		const wxGridCellCoordsArray& cells(GetSelectedCells());
 
 		//Copy title from header
 		if(cols.size())
diff --git a/src/wxcomponents.h b/src/wx/wxcomponents.h
similarity index 97%
rename from src/wxcomponents.h
rename to src/wx/wxcomponents.h
index 8080339..39752a1 100644
--- a/src/wxcomponents.h
+++ b/src/wx/wxcomponents.h
@@ -115,7 +115,7 @@ struct GRID_PROPERTY
 	std::string helpText; //Hover tool-tip help text
 };
 
-class wxPropertyGrid;
+class wxCustomPropGrid;
 
 //!WxGrid derived class to hold and display property data
 //So it turns out that someone has MADE a property grid.
@@ -124,7 +124,7 @@ class wxPropertyGrid;
 //use their code instead, its bound to be better. 
 //Also, this appears up in the wxwidgets SVN, 
 //so maybe there will be a name clash in future
-class wxPropertyGrid : public wxGrid
+class wxCustomPropGrid : public wxGrid
 {
 	protected:
 		//First element is key number. Second element is key type
@@ -143,9 +143,9 @@ class wxPropertyGrid : public wxGrid
 		//Is the nth row a separator row?
 		bool isSeparatorRow(int row) const;
 	public:
-		wxPropertyGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, 
+		wxCustomPropGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, 
 					const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS);
-		~wxPropertyGrid();
+		~wxCustomPropGrid();
 		
 		void OnSize(wxSizeEvent &size);
 		void OnLabelDClick(wxGridEvent &size);
diff --git a/test/rangefiles/test6.rrng b/test/rangefiles/test6.rrng
new file mode 100644
index 0000000..b6654e7
--- /dev/null
+++ b/test/rangefiles/test6.rrng
@@ -0,0 +1,12 @@
+
+# Number of elements and Number of mass ranges
+[IONS]
+Number=2
+Ion1=A
+Ion2=B
+[Ranges]
+Number=4
+Range1=    12.345    13.456    vol:12.110 Name:A A:1.000
+Range2=    22.220    23.100    vol:12.110 Name:A A:1.000
+Range3= 100.142    101.330    vol:12.110 Name:B B:1.000
+Range4=    44.320    56.680    vol:12.110 Name:B B:1.000
diff --git a/translations/makeTranslations b/translations/makeTranslations
index b5bb629..6f176d8 100755
--- a/translations/makeTranslations
+++ b/translations/makeTranslations
@@ -50,7 +50,7 @@ if [ $# -eq 1 ] ; then
 	
 	
 	if [ $1  == "update" ] ; then
-		xgettext --from-code=utf-8 -kTRANS -kwxTRANS -kNTRANS -kwxNTRANS `find ../src/ -name *.cpp` `find ../src/ -name *.h` -o update.pot
+		xgettext --from-code=utf-8 -k_ -kTRANS -kwxTRANS -kNTRANS -kwxNTRANS `find ../src/ -name *.cpp` `find ../src/ -name *.h` ../data/startup-tips.txt -o update.pot
 
 		echo "Merging with maintained locales"
 		for i in $MAINTAINED_LOCALES

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/3depict.git



More information about the debian-science-commits mailing list